线性表的链式存储

单链表

  1. 链表引入的原因:由于顺序表的插入、删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储。
  2. 定义:线性表的链式存储又称为单链表。它是通过一组任意的存储单元来存储线性表中的数据元素。为了建立线性表之间的线性关系,对每个链表结点,除存放元素自身的信息以外,还存放下一个元素的地址(指针)。

1.单链表可以解决顺序表存储需要大量连续存储单元的问题,单链表的元素是离散的分布在存储空间中的,但单链表附加指针域也存在浪费空间的问题,并且查找某个特定结点时,单链表需要从头开始遍历,依次查找。
2.在操作时,通常在单链表第一个结点之前附加一个头结点(表头),引入表头好处有:1.开始结点的指针存放在头结点中,所以在操作单链表的第一个结点时,可以和其它结点一样,无需进行其它操作。2.无论链表是否为空,其头指针都指向头结点,这样非空指针与空指针的操作也就得到了统一。

单链表的基本操作

1.采用头插法建立单链表(从表尾到表头到表头逆向建立单链表,每次均在头结点之后插入新元素)
2.采用尾插法建立单链表(从表头到表尾正向建立单链表,每次均在表位插入新元素)
3.按序号查找结点值
4.按值查找表的结点
5.插入结点的操作

p=GetElem(L,i-1);//查找插入位置的前驱结点
s->next=p->next;//令新结点的指针域指向p的后继结点
p->next=s;//令p的指针域指向新插入的结点s

6.删除结点的操作

p=GetElem(L,i-1);//查找插入未知的前驱结点
q=p->next;//令q指向被删除的结点
p->next=q->next;//将*q从链表中断开
free(q);//释放结点的存储空间

7.求表长的操作

双链表

  1. 引入双链表的原因:单链表访问其后继结点的时间复杂度尾O(1),而访问前驱结点的时间复杂度为O(n),双链表的引入可以解决这个问题。
  2. 双链表的定义:双链表在单链表的结点增加了一个指向其前驱结点的prior指针。
  3. 双链表的特点:双链表在查找其前驱结点的操作和单链表不同,并且在插入和删除操作和单链表不同,其它操作和单链表完全一致。(插入和删除操作需要对其prior指针进行修改)

循环链表

  1. 循环单链表
    概念:循环单链表的最后一个结点的指针域指向的不是null,而是头结点
  2. 循环双链表
    概念:相比于循环单链表,循环双链表还要使头结点的prior指针指向尾结点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值