- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 线性表; 2.1 线性表的定义与运算;2.1.2 线性表的基本操作
1.创建线性表 GreateList(L)
2.求线性表的长度 int LengthList(L)
3.按值查找 SearchList(L,x)
4.插入操作InsertList(L,i,x)
5.删除操作 DeleteList(L,i)
6.显示操作 ShowList(L);2.2 线性表的顺序存储;2.2.2 顺序表上基本运算的实现
线性表结构简单、易于实现,但插入或删除一个元素时需对其后继的全部元素逐个进行移动(平均需移动表中的一半元素)操作不方便,需花费较多时间,特别是当插入元素而需动态扩大连续存储时,线性表后面的存储区可能已被占用从而无法扩大。
所以,这种结构仅适用于数据元素个数不经常变动或只需在顺序存取设备上做成批处理的场合。下面我们分情况讨论线性表的插入和删除操作。
;(一)线性表插入操作(1); 举例(续);举例(续) ;线性表的插入操作(2);举例(续);举例(续);(二)线性表的删除(1);举例(续);举例(续);线性表的删除操作(2);举例(续);举例(续);2.3.1 线性链表
2.3.2 线性链表上基本运算的实现
2.3.3 循环链表
2.3.4 双向链表
; 2.3.1 线性链表
线性表顺序存储虽可随机存取表中的任一元素,但从另一方面来看,这一特点也铸成这种存储结构的三个弱点:
(1)在插入或删除操作时,需移动大量元素;
(2)在给长度变化较大的线性表预先分配空间时,必须按最大空间分配,使存储空间不能得到充分利用;
(3)表的容量难以根据实际需要扩充。
为克服上述缺点,本节讨论线性表的另一种存储结构——线性表的链式存储结构,简称线性链表。
; 2.3.1 线性链表;2.关于头指针、头结点和开始结点
(1)头指针:指向链表中第一个结点(头结点或无头结点时的开始结点)的指针。
(2)头结点:在开始结点之前附加的一个结点。
(3)开始结点:在链表中,存储第一个数据元素(A1)的结点。
通常用“头指针”来标识一个线性表,如线性表L,是指某链表的第一个结点的地址放在了指针变量L中,头指针为“NULL”则标识一个空表。;3.结点的描述
结点在C++语言程序中可用结构体数据类型来描述:
typedef struct linknode //定义结点的结构体
{ datatype data;
struct linknode * next;
} LinkNode , * LinkList; //定义结点类型LinkNode,定义结点指针
//类型LinkList
;2.3.2 线性链表上基本运算的实现;(一)线性链表的建立;例2.5 函数定义如下;(二)线性链表的插入操作;分情况讨论(1);插入结点的函数;分情况讨论(2);首结点之前插新结点函数定义;分情况讨论(3); 线性表末尾接上新结点函数定义 ;分情况讨论(4);有序链式线性表中插入新结点函数; (三)线性链表的删除操作;删除操作示意图; 链表中删除指定值的结点的函数定义 ;2.3.3 循环链表;2.关于存储密度
(1)存储密度是指结点数据本身所占的存储空间和整个结点结构所占的
存储空间之比。所以,顺序表的存储密度等于1,而链表的存储密度
小于1。
(2)采用链式存储比采用顺序存储占用更多的存储空间,因为链式存储
结构增加了存储其后继结点的地址的指针域。
(3)存储空间完全被结点值占用的存储方式称为紧凑存储,否则称为非
紧凑存储。显然,顺序存储是紧凑存储,而链式存储是非紧凑存
储。存储密度的值越大,表示数据所占用的存储空间越小。;2.3.4 双向链表;双向链表的结点类型可描述如下;1、插入;2、删除
文档评论(0)