【C语言】链表的使用及链表的实现原理
2023-04-18 15:53:48 时间
链表是什么?
1.逻辑结构上⼀个挨⼀个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相 反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。
2.由于分散存储,为了能够体现出数据元素之间的逻辑关系,每个数据元素在存储的同时,要 配备⼀个指针,⽤于指向它的直接后继元素,即每⼀个数据元素都指向下⼀个数据元素
** 本身的信息,称为“数据域” ** ** 指向直接后继的指针,称为“指针域”。指向NULL(空))。
下面是一个单链表的实现过程
#include
#include
#include //结构体是⼀种⼯具,⽤这个⼯具可以定义⾃⼰的数据类型
typedef struct
{
char Num[10];//学号
char Name[20];//姓名
} Student;
typedef struct tagNode
{
Student Stu;
struct tagNode *pNext;
} Node;
//定义链表的第⼀个学⽣,即学⽣单链表的头结点
Node *head = NULL;
void printfNode() //遍历元素
{
Node *node = head; //为了不去破坏那个本来的head,重新定义一个node指针变量。
while(node !=NULL)
{
printf("Num:%s,Name:%s
",node->Stu.Num,node->Stu.Name);
node = node->pNext; //node等于下一个节点,一直遍历下去
}
}
void addNode(Node *node)
{
node->pNext = NULL; //如果只是一个Node,那就是一个元素,你只知道他的数据,并不知道怎么去访问这个数据
if(head == NULL)
{
head = node; //一开始没有任何节点,那么传入的节点作为头结点
}
else
{
Node *p = head;
while(p != NULL && p->pNext !=NULL) //,获取最后一个节点的位置,跳出循环的那时候是最后一个节点,判断后继节点是否为空
{
p = p->pNext;
}
p->pNext=node; //下一个指针域指向新节点
}
}
int main()
{
Node *p1 = (Node*)malloc(sizeof(Node)); //malloc在 里面,给p1分配一个内存。 这里p1换成node输出一样
strcpy(p1->Stu.Num,"123"); //给p1赋值
strcpy(p1->Stu.Name,"louis");
Node *p2 = (Node*)malloc(sizeof(Node));
strcpy(p2->Stu.Num,"124");
strcpy(p2->Stu.Name,"daniel");
Node *p3 = (Node*)malloc(sizeof(Node));
strcpy(p3->Stu.Num,"125");
strcpy(p3->Stu.Name,"xd");
addNode(p1);
addNode(p2);
addNode(p3);
printfNode();
return 0;
}
输出:
Num:123,Name:louis
Num:124,Name:daniel
Num:125,Name:xd
相关文章
- 基于vue 实现 excel导出导入功能
- vue2.0运行导入的项目出现node:events:491 throw er; // Unhandled ‘error‘ event错误提示解决办法
- 创建一个web项目
- Github 用户查询案例【基于Vue2全局事件总线通信】
- 【node进阶】一文带你快速入门koa框架
- IDEA2022版本创建maven web项目(两种方式)最全图文教学
- 【Web实战-Tomcat-Servlet-Thymeleaf -JDBC-MySQL】浏览器页面显示数据库数据(水果库存系统)
- 每日算法之14. 最长公共前缀
- vsCode中vue文件无法提示html标签
- Python Flask框架-开发简单博客-项目布局、应用设置
- 若依RuoYi框架log图标与文字怎么改?
- Pinia 数据持久化储存(pinia-plugin-persistedstate)
- 0.JavaWeb概述
- react路由拦截(路由守卫)
- idea的简单介绍
- 学习笔记——书城项目之“我的订单”功能
- 学习笔记——书城项目第六阶段之去结账功能的准备工作、去结账功能的实现
- 每日算法之在二叉树中找到两个节点的最近公共祖先
- nginx跨域
- 每日算法之连续子数组的最大和(二)