一言不合彪代码才是最高境界。
书上岛的小例子
* 《嗨翻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);
简单知识点