《嗨翻C语言》随书练习五 6章 数据结构与动态存储
编辑时间:2017-03-26 作者:金满斗 浏览量:1750 来源:原创

一言不合彪代码才是最高境界。

书上岛的小例子

* 《嗨翻C语言》随书练习 6章 链表   2016-12-05
xiousheng@126.com
*/
 
 
#include <stdio.h>
#include <stdlib.h>    //要动态用内存必须用这个库 malloc(),free()
#include <string.h>
//消失的岛屿
//先创建岛名结构体
typedef struct island{
	char *name;
	char *opens;
	char *closes;
	struct island *next;     //指针指向下一个岛屿,结构体 。这属于递归结构 
}island;
 
 
island * create(char *name){
	island *i = malloc(sizeof(island));
	i->name = strdup(name);   //用这个函数复制字符串,才不会名字一样。因为名字指向字符串指针,而字符串又是只读的。
	i->opens = "09:00";
	i->closes = "17:00";
	i->next = NULL;
	return i;
 
};
 
//显示链表 
void display(island *start){
	island *i = start;
	for (; i != NULL; i = i->next) {
		printf("岛名字:%s开门时间:%s-%s\r\n", i->name, i->closes, i->closes);
	}
};
//释放链表
void release(island * start){
	island *i = start;
	i->next = NULL;
	for (; i != NULL; i = i->next) {
		free(i->name);
		free(i);
	}
}
 
//航海日志
int main(){
	printf("请输入第1座岛名\r\n");
	char name[80];  //用于于记录表名
	fgets(name, 80, stdin);
	island * p_island0 = create(name);
	printf("请输入第2座岛名\r\n");
	fgets(name, 80, stdin);
	island * p_island1 = create(name);
	p_island0->next = p_island1;
	display(p_island0);   //显示
	release(p_island0);   //释放链表,不能忘记
	//自动循环,真正有意义的
	island *i = NULL;
	island *next = NULL;
	island *start = NULL;   //连续赋值
	int N = 0;
	printf("请输入岛名\r\n");
	fgets(name, 80, stdin);
	for(; strlen(name) >2 ; i = next)
	{	
		N++;
		next = create(name);
		if (start == NULL){
			start = next;
		};
		if (i != NULL){
			i->next = next;
		}
		printf("请输入第%d座岛名\r\n",N);
		fgets(name, 80, stdin);
	}
	display(start);
	release(start);

简单知识点


来说两句吧