c语言学习链表的个人笔记(大佬勿喷)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable : 4996)
#define num 30
typedef struct _mvname
{
char name[num];//电影名
int number;//电影评分(0-9)
struct _mvname* next;
}new;
void print(struct _mvname* fp);//遍历链表函数
char* _scanf(char* fi, int nume);//输入函数
int main()
{
char input[num];
new* head = NULL, * last = NULL, * prev = NULL;
puts("stdin the name");
while (_scanf(input, num) != NULL && input[0] != '\0')
{
prev = (struct _mvname*)malloc(sizeof(struct _mvname));
if (prev==NULL)
puts("prev分配内存失败");
if (head == NULL)
{
head = prev;
}
else last->next = prev;
last = prev;
prev->next = NULL;
strcpy(prev->name, input);
puts("stdin the number(0-9)");
scanf_s("%d", &prev->number);
while (getchar() != '\n') {
continue;
}
puts("stdion the name(no stdion Enter)");
}
prev = head;
print(prev);
}
void print(struct _mvname* fp)
{
while (fp != NULL)
{
printf("TV zhe name :%s\t\tnuber zhe is:%d\n", fp->name, fp->number);
fp = fp->next;
}
}
char* _scanf(char* fp, int a)
{
char* re = NULL, * find = NULL;
re = fgets(fp, a, stdin);
if (re)
{
find = strchr(fp, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
{
continue;
}
}
return find;
}
下面是链表的有用的操作:
1.初始化一个空链表
2.在链表末尾添加一个新建项
3.确定链表是否为空
4.确定链表是否已满
5.确定链表中的项数
6访问链表中的每一项执行某些操作,如显示该项
7.在链表的任意位置插入一个项
8.移除链表中的一个项
9.在链表中检索一个项(不改变链表)
10.用另一个项替换链表中的一个项
11.在链表中检索一个项
非正式但抽象的链表的定义:链表是一个能存储一系列项且可以对其进行所需操作的数据的对象。该定义既未说明链表中可以存储什么项,也未指定是用数组。结构还是其他数据形式来存储项,而且并未规定用什么方法来实现操作(如,查找链表中元素的个数)。这些细节都留给实现完成。为了让实例尽量简单,我们采用一种简化的链表作为抽象数据类型。他只是包含电影项目中的所需属性。
该数据总结如下:
类型名: 简单链表
类型属性: 可以存储一系列项
类型操作: 初始化链表为空确定链表为空确定链表已满确定链表中的项数在链表末尾添加项遍历链表,处理链表中的项清空链表