C语言文章更新目录
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数
C代码是怎样跑起来的?
C语言实现字符串的加密和解密
C语言——文件的基本操作
今天来介绍一下C语言中常见的一种数据结构——链表
如下是链表的结构示意图:
在链表中有一个头指针变量,图中head表示的就是头指针,这个指针变量保存一个地址。也就是说头指针指向一个变量,这个变量就是量表的元素。在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所包含的数据,而指针部分用来指向下一个元素。最后一个元素的指针指向null,表示指向的地址为空。
从示意图中我们可以看到,head头结点指向第一个元素,第一个元素的指针指向第二个元素,第二个元素的指针又指向第三个元素,第三个元素的指针指向null。这样我们就可以通过头指针寻找链表中的元素。
下来我们通过一个具体的实例来深入地了解一下链表,编写一个学生信息的链表结构,并且将链表中的信息进行输出。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
struct Student
{
char name[20];//姓名
int id;//学号
struct Student* next;//指向下一个节点的指针
};
int count;//表示链表长度
struct Student* create()
{
struct Student* head = NULL;//初始化链表的头指针
struct Student* end, * new;
count = 0;//初始化链表长度
end = new = (struct Student*)malloc(sizeof(struct Student));//动态分配内存空间
printf("请输入姓名,学号\n");
scanf("%s", &new->name);
scanf("%d", &new->id);
while (new->id != 0)
{
count++;
if (count == 1)
{
new->next = head;//使得指向为空
end = new;//跟踪新加入的节点
head = new;//头指针指向首节点
}
else
{
new->next = NULL;//新节点的指向为空
end->next = new;//原来的为节点指向新节点
end = new;//end指向新节点
}
new = (struct Student*)malloc(sizeof(struct Student));//再次动态分配节点的内存空间
scanf("%s", &new->name);
scanf("%d", &new->id);
}
free(new);//释放空间
return head;
};
void show(struct Student* head) {
struct Student *temp;
int index = 1;
printf("有%d位学生:\n",count);
temp = head;
while (temp != NULL)
{
printf("第 %d 位学生的姓名是:%s,学号是:%d \n", index, temp->name, temp->id);
temp = temp->next;
index++;
}
}
int main() {
struct Student* head;//定义头结点
head = create();//创建节点
show(head);//输出链表
return 0;
}
运行结果
如果您觉得本篇文章对您有帮助,请转发给更多的人
【C语言中文社区】是一个C语言/C++视频教程、学习笔记、电子书、计算机二级资料等专注于C语言/C++编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。