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