单链表,三部分详解(第一部分)单链表的解析

1. 链表的概念及结构

链表就是一个在物理储存上非连续,但在逻辑顺序上是连续的指针链接实现。

单链表,三部分详解(第一部分)单链表的解析_第1张图片 

链表就像一大节火车,你在淡季的时候可以把车厢减少一点,旺季的 时候可以多加一点,不会影响其他车厢的使用。每节车厢都独立存在。

那我们怎么让这些火车完成所谓的逻辑顺序的呢?假设每节车厢放着下一个车厢的钥匙,你在走到这一节车厢的时候,就能拿到下一节车厢的钥匙,进入下一节车厢,

这样就相当于往一个结构体里放进一个同类型的结构体指针,就可以同个这个指针指向下一个结构体。

单链表,三部分详解(第一部分)单链表的解析_第2张图片 

与顺序表不同的是这样的每节车厢的独立空间,我们叫做“节点或结点”。

这个节点要保存的是一个数据,和下一个节点的指针。 

为什么要一个指针指向下一个空间呢?因为节点的空间和顺序表不同是用数组存储的。而是随机的内存空间。所以要拿一个指针来寻找。下面的代码表示单链表的节点。

struct SListNode
{
 int data; //节点数据
 struct SListNode* next; //指针变量⽤保存下⼀个节点的地址
};

2. 单链表的实现

typedef int SLTDataType;
typedef struct SListNode
{
 SLTDataType data; //节点数据
 struct SListNode* next; //指针保存下⼀个节点的地址
}SLTNode;
void SLTPrint(SLTNode* phead);
//头部插⼊删除/尾部插⼊删除
void SLTPushBack(SLTNode** pphead, SLTDataType x);
void SLTPushFront(SLTNode** pphead, SLTDataType x);
void SLTPopBack(SLTNode** pphead);
void SLTPopFront(SLTNode** pphead);
//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);
//在指定位置之前插⼊数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//在指定位置之后插⼊数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x);
//删除pos之后的节点
void SLTEraseAfter(SLTNode* pos);
//销毁链表
void SListDesTroy(SLTNode** pphead);

这是单链表实现用到的接口,在下一部分会详细进行讲解。 

3. 链表的分类

链表肯定不止一种单链表,他总共用八种,但最重要的就是单链表和双链表 

 单链表,三部分详解(第一部分)单链表的解析_第3张图片

你可能感兴趣的:(c语言单链表,c语言,开发语言,c++,数据结构)