链表是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语言新手也易读!

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)