<<数据结构与算法>>---笔记(3)---线性表的链式表示

本文介绍了链式存储结构和顺序表的特点、优缺点及应用场景。顺序表以物理位置相邻表示逻辑关系,支持随机存取,但插入删除操作效率低。链式存储结构中,数据元素逻辑上相邻但物理位置不一定相邻,便于动态扩展,但访问速度相对较慢。链表包括单链表、双链表和循环链表,其操作如空表判断、销毁、清空和表长计算等有特定算法。链式存储通过头结点简化操作处理,而顺序表适合数据元素数量固定且频繁读取的场景。
摘要由CSDN通过智能技术生成

复习上一章:

        顺序表的特点: 以物理位置相邻表示逻辑关系

        顺序表的优点: 任一元素均可随机存取

        顺序表的缺点: 进行插入和删除操作时, 需移动大量的元素. 存储空间不灵活

顺序表的特点是什么?

1) 利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系, 即线性表的逻辑结构与存储结构一致

2) 在访问线性表时, 可以快速计算出任何一个数据元素的存储地址. 因此可以粗略地认为, 访问每个元素所花时间相等

        这种存取元素的方法被称为随机存取法

顺序表的优点是什么?

优点: 

        存储密度大 (结点本身所占存储量/ 结点结构所占存储量)

        可以随机存取表中任一元素

顺序表的缺点是什么?

   缺点:

        在插入,删除某一元素时候, 需要移动大量元素

        浪费存储空间      

        属于静态存储形式, 数据元素的个数不能自由扩充

解决方法: 我们可以通过链表解决上述问题.


什么是链式存储结构?

        结点在存储器中的位置是任意的, 即逻辑上相邻的数据元素在物理上不一定相邻

        线性表的链式表示又称为 分顺序映像 或 链式映像

用一组物理位置任意的存储单元来存放线性表的数据元素

 这组存储单元既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的

链表中的元素的逻辑次序和物理次序不一定相同

结点由 数据域和指针域组成

 链 又称作 指针

第一个也叫头指针

单链表是由头指针唯一确定, 因此单链表可以用头指针的名字来命名

各结点由几个域组成? 具体指的是什么?

各结点 由 两个域组成

分别是         数据域:   存储元素数值数据

                    指针域:   存储直接后继结点的存储位置  

数据指针

与链式存储有关的术语:

        1.结点: 数据元素的存储映像. 由数据域和指针域两部分组成                       

数据域指针域

        2. 链表: n个结点由指针链组成一个链表

线性表的链式表示和实现:

        单链表, 双链表, 循环链表

单链表: 结点只有一个指针域的链表, 称为单链表或者 叫做线性链表

双链表: 结点只有两个指针域的链表 称为双链表

循环链表: 首位相接的链表称为循环链表

头节点不是用来填充元素的

链表的存储结构则出现两种形式:

1)不带头结点

2)带头结点

如何表示空表?

空表: 就是一个表中 没有数据元素 表长为 0 

无头结点时, 头指针为空时表示空表

有头结点时, 头结点的指针域为空时 表示空表

    在链表中设置头结点 有什么好处?

        1.便于首元结点的处理

                首元结点的地址保存在头结点的指针域中, 所以在链表的第一个位置上的操作和其他位置一致, 无须进行特殊处理

        2. 便于空表和非空表的统一处理

                        无论链表是否为空, 头指针都是指向头结点的非空指针, 因此空表和非空表的处理也就统一了

头结点的数据域内装的是什么?

                头结点的数据域可以为空, 也可存放线性表长度等附加信息, 但此结点不能计入链表长度值

链表 (链式存储结构) 的特点是什么?

        1) 结点在存储器中的位置时任意的, 即逻辑上相邻的数据元素 在物理上不一定相邻

        2) 访问时只能通过头指针进入链表, 并通过每个结点的指针域 依次向后顺序扫描其余结点, 所以寻找第一个结点和最后一个结点所花费的时间不等

                                上述 的这种存取元素的方法  被称为  顺序存储法

                                                                        而 顺序表  为 随机存取法

微总结:

循环链表 又可以分为 单循环链表和双循环链表


带头结点的单链表:

        

        像这种包含两部分数据, 我们在高级语言中一般用  结构体 来实现


 

补充单链表的几个常用简单算法

    1)    补充算法 -------判断链表是否为空:

                                空表: 链表中无元素, 称为空链表  (头指针和头结点仍然在)

                                即判断  头结点指针域是否为空   就可以了

  头结点指针域为空 即可清空链表L

2)      单链表的销毁: 链表销毁后不存在

        算法思路: 从头指针开始, 依次释放所有结点

3) 清空链表

        链表仍存在, 但链表中无元素, 成为空链表 (头指针和头结点仍然在)

算法思路: 依次释放所有结点, 并将头结点指针域设置为空

4) 求单链表的表长

         算法思路: 从首元结点开始, 依次计数所有结点

   

总结:

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值