链表是C语言初学语法阶段和数据结构学习阶段必会的一个数据结构实现,由于其链式结构的特点,即经典又经常出错,加上其他语言又不太需要这么练习,比如C++有STL库支持,无需亲自实现,因此这个模板可能对C语言同学非常有用,所以提供了纯C语言版,大家很有用可以参考
#include<stdio.h>
typedef struct student
{
//成员信息
int num; //学号 主键
char sex;
int score;
char name[100];
//指针成员
struct student *next;//4个字节
//...
}STU;
STU *Head;
STU *Last;
int Delete(int num)
{
STU *p,*q;
p=Head;
q=Head->next;
while(q!=NULL)
{
if(q->num == num)
{
p->next=q->next;
free(q);
break;
}
p=p->next;
q=q->next;
}
return 0;
}
int Show() //显示全部节点信息
{
STU *p;
p=Head->next;
while(p!=NULL)
{
printf("%d %d\n",p->num,p->score);
p=p->next;
}
return 0;
}
int Search(int num) //修改某节点信息
{
STU *p;
p=Head->next;
while(p!=NULL)
{
if(p->num == num)
{
printf("%d %d\n",p->num,p->score);
break;
}
p=p->next;
}
return 0;
}
int Edit(int num) //修改某节点信息
{
STU *p;
p=Head->next;
while(p!=NULL)
{
if(p->num == num)
{
printf("输入新的信息:\n");
scanf("%d%d",&p->num,&p->score);
printf("学号%d的信息修改成功!\n",num);
break;
}
p=p->next;
}
return 0;
}
int Creat() //创建新节点
{
STU *Cur;
Cur=(STU *)malloc(sizeof(STU));
printf("开始创建,请输入学号和成绩:\n");
scanf("%d%d",&Cur->num,&Cur->score);
Cur->next=NULL;
Last->next=Cur;
Last=Last->next; //更新指针指向最后一个节点
return 0;
}
int main()
{
char ch;
int num;
// 头节点创建
Head=(STU *)malloc(sizeof(STU));
Head->num=0;
Head->score=-1;
Head->next=NULL;
Last=Head;
// -------------------------------
printf("按c继续创建!按其他键结束\n");
while(ch=getch())
{
fflush(stdin);
if(ch=='c')
{
Creat();
}
else
{
printf("结束创建!\n");
break;
}
printf("继续按c创建!按其他键结束\n");
}
printf("全部学生节点信息如下:\n");
Show();//输出全部学生信息
printf("请输入要删除的学号:\n");
scanf("%d",&num);
Delete(num);
printf("删除后学生节点信息如下:\n");
Show();//输出全部学生信息
return 0;
}由于增、删、改、查各个功能需要共同的结构体,以及主函数调用传参,因此这里以一个学生管理系统为例,为大家实现增删改查的全过程,代码非常简单,对C语言新手也易读!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程