创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
在经过数组基本知识的学习后,我们知道数组可以用来存放一组数据
但是数组的个数是固定的,如果我们想动态改变这组数据,通过数组就十分麻烦
基于结构体的知识基础上,本文将介绍一种新的数据结构——链表
链表 目录
- 一、链表的基本概念
- 步骤:
一、链表的基本概念
根据数组长度固定的特点,我们可以将数组比作货车,货车装满了数据,添加数据只能再装一辆货车(定义一个新数组),修改数据还要删除某些已有数据,太具有局限性。
从长度固定的角度出发,我们需要一个不是长度固定,还能存放一组数据的“数据类型”,就是链表。
如果说数组是货车,那链表就是火车,它可以随意地在一组数据的末端添加新数据,还可以在中间添加删除等,非常灵活,那么链表是如何定义的呢?
链表通过结构体和指针实现。通常需要定义一个表示链表节点的结构体,包含两个成员:数据和指向下一个节点的指针。
一个链表节点的结构体定义例如:
定义节点时同时定义节点的指针,在后续堆区创建、链表遍历等都会用到
typedef struct node //使用typedef简化命名
{
int data; //数据
struct node* next;//下一个节点的 结构体指针
} Node,* P_NODE,*PNode; //节点指针
一个链表是由多个结点连接组成,链表中的第一个节点称为头节点,最后一个节点称为尾节点。
头节点通常用一个指针来保存,指向链表的第一个节点。如果链表为空,则头指针为NULL。
在定义好节点的结构体后,创建一个(静态)链表的过程为:
步骤:
1.声明一个头节点,一般头节点不存贮数据
Node header = { -1,NULL };
2.创建几个节点变量: 栈区 或 堆区
Node n1 = { 0,NULL };
Node n2 = { 6,NULL };
Node n3 = { 2,NULL };
Node n4 = { 2,NULL };
或
P_NODE newNode = malloc(sizeof(Node)); //记得free
(堆区知识:堆区详解)
- 链接所有节点
header.next= &n1;
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
n4.next = newNode; //已经是结构体指针类型,不需要再取地址
newNode->next = NULL;
- 遍历链表
//Node* p;
P_NODE p= header.next;
while (p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
free(newNode);
我们可以将添加节点封装为函数:
PNode create(int data);
没写完…下次再写
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |