初识数据结构之入门必懂——链表(单链表)


前言

在学习完线性表中使用数组来存储数据的顺序表后,今天我们来学习使用链式结构来存储数据——链表。


一、链表是什么?

链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针来链接实现的。在这里插入图片描述

二、链表分类

在这里插入图片描述
我们通过链表指针的指向,是否带头,尾节点是否指向头节点,可分为上述几类,它们之间两两组合,共有8种链表。
在往后的使用以及学习的考虑上,我们只重点讲解2种链表:

  1. 不带头非循环单链表,也就是最简单的一种
  2. 带头循环双链表,也就是最复杂的一种

三、对于单链表函数的定义以及实现

1.对于单链表节点的定义

typedef int SLTDataType;
typedef struct SListNode
{
   
	SLTDataType data;
	struct SListNode* next;
}SLTNode;

我们发现单链表节点结构体非常简单,只需要包含数据及下一节点的指针。

2.对于单链表函数的定义与实现

SLTNode* BuySLTNode(SLTDataType x);
void SListDestory(SLTNode** pphead);
void SListPushFront(SLTNode** pphead, SLTDataType x);
void SListPushBack(SLTNode** pphead, SLTDataType x);
void SListPopBack(SLTNode** pphead);
void SListPopFront(SLTNode** pphead);
SLTNode* SListFind(SLTNode* phead, SLTDataType x);
// 在pos之前插入
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
// 在pos后面插入
void SListInsertAfter(SLTNode* pos, SLTDataType x);
// 删除pos位置
void SListErase(SLTNode** pphead, SLTNode* pos);
// 删除pos后面位置
void SListEraseAfter(SLTNode* pos);

我们发现单链表函数的接口,有时仅需传输一级指针,有时却需要传输二级指针。可以现在在脑海中构建一个单链表,想一想,为什么要传二级指针。

接下来,我们对上述函数一一实现。

SLTNode* BuySLTNode(SLTDataType x)
{
   
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值