数据结构与算法——单链表的使用

1. 单链表

用一组地址任意的存储单元存放线性表中的数据元素,其中其数据元素由一系列的结点构成。结点又包含数据域和指针域:

数据域 (数据元素) + 指针域 (指示后继元素存储位置) = 结点

以“结点的序列” 表示的线性表称作链表

1.1 单链表的存储结构

1.不带头结点:


不带头结点的的单链表

以线性表中第一个数据元素a1的存储地址作为线性表的地址,称作线性表的头指针(head)。

  • 链表指针存放链表第一个数据元素结点的地址
  • 空链表时该指针域为NULL

2.带头结点 :

在这里插入图片描述
带头结点的的单链表(箭头所指表示头结点)

有时为了操作方便,在第一个结点之前虚加一个“头结点”,并用链表的头指针指向头结点,称为带头结点的单链表。

  • 一个专门的结点,称为头结点
  • 该头结点永远存在
  • 该头结点指针域存放第一个数据元素结点的地址
  • L.next = NULL

用法举例:已知指针p指向单链表L的第i个结点,则访问第i个数据和第i+1个数据的方法分别是p->datap->next->data

1.2 单链表的C语言实现

简单链表示例:

在这里插入图片描述
具有两个节点的单链表

代码实现:

// 类型定义
typedef struct Node
{
   
	ElemType elem;
	struct Node *next;
}Node,*Ptr;
typedef Ptr *SqListPtr;

//变量的定义和使用
Node n1, n2;/* 定义2个结点变量*/
Ptr p = &n1;/* 定义一个指向结点的指针变量p, 并存放n1的地址(指针) */
n1.next = &n2; /* 结点n1的指针域存放结点n2的地址*/
SqListPtr L = p; //定义一个单链表L
N2.next = NULL;

1.2.1 查找——按位置查找

代码实现:

//寻找位于 pos 的结点,并将数据存储到 *elem 中。
Status List_Retrieve(SqListPtr L, int pos, ElemType *elem)
{
   
	Status s = range_error;
	Ptr p = (*L)->next;; /* 带头结点,移动p指向第一个元素结点*/
	int i
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值