C语言链表实现:增删改查操作全解析与代码示例

创始人
2025-01-01 11:09:31
0 次浏览
0 评论

如何用C语言创建一个链表,实现增、删、改、查?

#include#include#include//首先定义一个学生类型,代表一个学生的信息,如下:typedefstructstudent{intnum;//代表学号charname[30];//表示姓名floatscore;//表示分数}Student;//定义一个NODE类型,代表一个节点信息,如下:typedefstructnode{studentst;//代表一个学生的信息structnode*next;//代表NODE类型的指针}NODE;//1.写出一个函数,建立一个有前导节点的线性链表,每个节点包含三个数据字段:学号、姓名、成绩。
函数形式如下:NODE*creat_link(intdirection){NODE*head,*p,*tail;intxh,i=1;if(direction==1)//当direction的值为1时,新创建节点链接到末尾{tail=head=(NODE*)malloc(sizeof(NODE));head->next=NULL;printf("请输入%d的学号Student:",i);scanf("%d",&xh);while(xh>0)//暂时从键盘输入学生本例中,当输入的学号非正数时,建立链表{p=(NODE*)malloc(sizeof(NODE));p->st.num=xh;printf("请输入第%d个学生的姓名:",i);scanf("%s",p->st.name);printf("请输入第%d名学生的成绩:",i);scanf("%f",&p->st.score);p->next=NULL;tail->next=p;tail=p;i=i+1;printf("请输入%d学生的学号:",i);scanf("%d",&xh);}}elseif(direction==0)//当direction为0时,新创建的节点成为第一个节点{head=(NODE*)malloc(sizeof(NODE));head->next=NULL;printf("请输入第%d个学生的学号:",i);scanf("%d",&xh);while(xh>0)//暂时输入通过键盘输入学生状态。
当输入的学号非正数时,建立链表{p=(NODE*)malloc(sizeof(NODE));p->st.num=xh;printf("请输入第%d名学生的姓名:",i);scanf("%s",p->st.name);printf("请输入第%d名学生的姓名第%d位学生"学生成绩:",i);scanf("%f",&p->st.score);p->next=head->next;head->next=p;i=i+1;printf("请输入第%d个学生的学号:",i);scanf("%d",&xh);}}returnhead;}​​//2.写一个函数,输出上面链表的每个节点的数据字段值,这个函数对应的函数需要一个形参,代表链表的头指针的形式。
如下:voidprint_link(NODE*head){NODE*p;p=head->next;printf("%-10s%-20s%-10s\n","学号","姓名","分数");while(p!=NULL){printf("%-10d%-20s%-10.1f\n",p->st.num,p->st.name,p->st.score);p=p->next;}//该函数可以输出head指向的所有链表节点值,输出格式如下:/*该函数输出线性表sq中的所有数据,格式如下:学号、姓名、成绩12张三234.518李四987.7…………………….*/}//3、编写删除节点中节点的函数intdel_link(NODE*head,charn)链表ame[]){NODE*p,*p1;p=head->next;p1=head;while(p!=NULL){if(strcmp(p->st.name,name)!=0){p1=p;p=p->下一个;}else{break;}}if(p!=NULL){p1->next=p->next;free(p);return1;}else{return0;}//删除head指向的链表中名为name的节点,删除成功返回1,失败返回0}//4.写出要插入链表的节点。
点算法ininsert(NODE*head,studentx,intwz){NODE*p=head;inti=0,jg;if(wz<=0){jg=0;}else{while(inext;}if(p==NULL){jg=0;}if(i=wz-1){//查找wz、p点之前的节点到它NODE*q;q=(NODE*)malloc(sizeof(NODE));q->st.num=x.num;strcpy(q->st.name,x.name);q->st.score=x.score;q->next=p->next;p->next=q;jg=1;}}returnjg;//该函数可以在节点wz之前插入一个新节点,并且的数据字段新节点是x。
插入成功则返回1,插入失败则返回0。
}//5。
编写main函数,调用上面对应的程序算法,建立链表,并输出链表的值。
voidmain(){NODE*head;//定义指针变量headintwz;//表示插入位置charxm[30];studentst;//定义一个变量st,代表一个学生的信息head=creat_link(1);print_link(head);//调用函数创建链表并将返回值发送给head;//调用函数输出链表中每个节点的值//输入学生的相关信息发送给变量strintf的相关成员p("\n\n请输入要插入的位置:");scanf("%d",&wz);//输入wz的值printf("请输入待插入学生的学号:");scanf("%d",&st.num);printf("请输入待插入学生的姓名:");scanf("%s",st.name);printf("请输入要插入的学生成绩:");scanf("%f",&st.score);//调用函数放入学生链表中的st值作为节点插入。
如果插入成功,则输出新的链表if(insert(head,st,wz)==1){printf("\n插入成功,新表为:\n");print_link(head);}else{printf("插入不成功");}//调用函数删除链表中指定节点的值。
如果删除成功,则生成新的链表printf("\n\n请输入必填的被删除学生姓名:");getchar();gets(xm);if(del_link(head,xm)==1){printf("\n删除成功,新表为:\n");print_link(head);}else{printf("删除不成功");}}

用C语言写的数据结构的定义

typedefstruct//typedef的意思是定义类型。
(比如TypeInt;所以可以用它来定义一个整型变量,number;当然这里定义的也可以像NodeOther一样使用;这说明Other是一个struct){elementTypeData;;(这里elementtype表示可以有很多数据,比如inta;charaddress[10]等)structnode*next;//定义指向节点中下一个节点的next指针(例如对于,当前节点是p,那么p->next指向下一个节点)}node;//定义一个名为node的结构体
热门文章
1
JSF架构解析与Java学习资源分享:J... JavaServerFacesJSF体系结构JavaServerFaces(JS...

2
数据结构C语言版深度解析与C语言入门很简... 《数据结构(C语言版)》.严蔚敏吴伟民著.pdf在《数据结构(C语言版)》一书中...

3
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

4
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

5
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

6
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

7
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

8
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

9
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

10
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...