构造一个链表,记录电影名字,评价(0~10分的评分),将链表中的内容依次输出.
代码:
#include <stdio.h>
#include <stdlib.h> //调用malloc()函数 free()函数
#include <string.h> //调用gets()函数,getchar()函数
#define TSIZE 45
//链表创建 值域+指针域
struct film{
char title[TSIZE]; //电影标题
int rating; //评价0~10
struct film * next;
};
int main()
{
struct film *head = NULL; //定义一个头指针,指向个空指针不然容易成为野指针
struct film *prev,*current; //定义指针变量
char input[TSIZE];
puts("输入电影名: ");
while( gets(input) != NULL && input[0] != '0' ) //gets()函数返回的是一个指针
{
current = (struct film *)malloc(sizeof(struct film)); //包含头文件stdlib.h
if(head == NULL)
head = current;//头指针为空时,指向当前指针
else
prev -> next = current; // prev = current 注意结合33行代码理解
current -> next = NULL; //当前链表的指针域指向空
strcpy(current -> title,input); //地址操作
puts("输入你的电影评价 <0~10>: ");
scanf("%d",¤t -> rating); //
while(getchar() != '\n')
continue;
puts("输入下一个电影名 (空格结束): ");
prev = current;
} //构造单链表
if(head == NULL)
printf("没有数据输入.");
else
printf("电影名: \n");
current = head;//头指针不为空时,指针变量current指向头指针
while(current != NULL)
{
printf("电影名: %s 评价: %d\n",current -> title,current -> rating);
current = current -> next; //当前链表的指针指向current变量指向下一个链表
}
//释放构造的链表的空间
current = head;
while(current != NULL)
{
free(current);
current = current -> next; //链表传递依次释放指针
}
printf("Bye!\n");
return 0;
}
初学链表要搞清楚变量的赋值的意义,每个步骤的意思要理解清楚.