链表
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 45
typedef struct film
{
char tit[SIZE];
int rating;
struct film *next;
} List;
int main(){
List * head = NULL;
List *prev = NULL, *current = NULL;
char input[SIZE];
puts("输入电影的名称");
while (gets(input) != NULL&&input[0]!='\0')
//当输入不是空或者回车,开辟出一个结构体的大小
{
//current 指针 指向开辟出的malloc的空间
current = (List*)malloc(sizeof(List));
//结构体指针head head开始为null
if (head == NULL)
//将current指针指向的地址赋值给head
head = current;//创建链表的头
else{
prev->next = current;//将current所开辟的新的空间地址赋值给prev->next,就是上一个的
//指尾部
}
//struct film *next;
//current所指的结构体中的next又开辟了一个结构体,作为下一个的结构体
current->next = NULL;
//将input里面的内容拷贝到current所指的结构体里面的tit里面
strcpy(current->tit, input);
puts("输入评分");
scanf("%d", ¤t->rating);
if (getchar() == 'q')
break;
puts("输入下一部电影");
//将current的指针地址赋值给prev
prev = current;
//将current变成空指针
current = NULL;
}
//head为null证明没有输入数据
if (head == NULL)
printf("没有数据输入\n");
else
//有数据输入
printf("今年你看过的电影有:\n");
//将current重新指向开头的位置
current = head;
//current!=null证明这个结构体不是空
while (current != NULL){
printf("电影名称:%s 分数:%d \n", current->tit, current->rating);
//指向下一个结构体
current = current->next;
}
//再次将current指针指向链表头部
head = current;
while (current != NULL){
//释放所有malloc出来的结构体空间
free(head);
current = current->next;
}
system("pause");
return 0;
}