链表学习记录1

64 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

线性表和单链表区别

  • 线性表:普通线性表可以随机存取其中的任意一个元素,但是插入和删除需要移动大量的元素。
  • 链式线性表:不需要使用地址连续的存储单元,不要求逻辑上相邻的元素在物理位置上也相邻,此时插入和删除不需要移动元素,只需要修改指针即可,但也会失去顺序表中一个随机存取的特点。

1.单链表的定义

  1. 线性表的链式存储又可以称为单链表,通过任意一组存储单元来存储线性表中的数据元素,建立数据元素之间的线性关系。
  2. 对于每一个链表的结点,需要存放自身的信息还需要存放一个指向其后继的指针。
  3. 单链表的结点类型描述
typedef struct LNode{//定义单链表结点类型
ElemType data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;

4.单链表可以解决线性表之前需要大量连续存储单元的缺点。 5.单链表附加指针域,存在浪费存储空间的特点。 6.单链表是一个非随机存取的存储结构。 7.单链表在查找某个特定的值时,不能直接找到那个特定的结点,需要从头开始遍历依次查找。

//创建一个结点
SLTNode* BuyListNode(SLTDateType x);
//销毁单链表
void SLTDestory(SLTNode** pphead);
//单链表头插
void SLTPushFront(SLTNode** pphead, SLTDateType x);
//单链表尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);
//单链表头删
void SLTPopFront(SLTNode** pphead);
//单链表尾删
void SLTPopBack(SLTNode** pphead);
//单链表结点查找
SLTNode* SLTNodeFind(SLTNode* phead, SLTDateType x);
//单链表结点删除(删除pos位置的结点)
void SLTErase(SLTNode** pphead, SLTNode* pos);
//单链表结点插入(在pos之前插入)
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);
// 单链表结点插入(在pos之后插入)
void SLTInsertBack(SLTNode** pphead, SLTNode* pos, SLTDateType x);
// 单链表结点修改
void SLTModify(SLTNode* phead, SLTNode* pos, SLTDateType x);
//打印单链表
void PrintSLT(SLTNode * phead);

注意:链表和顺序不同的是,顺序表传过来的指针是肯定不会为空的,而链表传过来的指针是可能为空的,比如说当链表中没有元素时,头指针所指向的就是NULL,如果在第一行写上断言就会有问题。

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情