- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从本章开始到第四章讨论的线性表、栈、队列和串的逻辑结构都属于线性结构。在线性结构中,元素之间存在一个对一个的相互关系,其逻辑特征为: (1)存在唯一的一个被称为“起始”的数据元素。 (2)存在唯一的一个被称为“终端”的元素。 (3)除起始元素外,其它每个元素有且仅有一个直接前趋。 (4)除终端元素之外,其它每个元素有且仅有一个直接后继。 本章的基本内容:线性表的逻辑结构定义和各种存储结构、描述方法及其建立在这两种存储结构上的运算实现。 2.1 线性表的基本概念 在实际应用中,线性表是最常用而且最简单的一种数据结构。 线性表定义:线性表是由n个数据元素组成的有限序列,其中,n即数据元素的个数,定义为线性表的长度,当n为零时称为空表,一般将n0时的线性表记为:(a1,a2,……,ai,……,an) 其中,a1是第一个数据元素,又称为起始结点,an是最后一个数据元素,又称为终端结点。当i=1,2,…,n-1时,ai有且仅有一个直接后继a i+1;当i =2,3,…n 时,ai有且仅有一个直接前趋a i-1。注意这里的ai(1≤ i≤ n)仅仅是一个抽象的符号,其具体含义,在不同的情况下各不相同,它可以是一个数,一条记录或一个符号,甚至是更复杂的信息。例如,英文字母表(A,B,……Z)是一个线性表,职工工资表等。 线性表的结点之间的逻辑关系符合线性结构的逻辑特征,是一种线性结构。 常见的线性表的基本运算: (1)置空表SETNULL(L):将线性表L置成空表。 (2)求长度LENGTH(L):求给定线性表L中数据元素的个数。 (3)取元素GET(L,i):结果是线性表L中的第i个数据元素。 (4)定位函数LOCATE(L,x):当线性表中存在一个值为x的数据元素,则结果是该数据元素在表中的位序,否则,表示值为x的数据元素不存在。 (5)前趋函数PRIOR(L,x):若x为线性表中的一个数据元素,且其位序大于1,则结果为L 的直接前趋,否则,给出一个特殊值示出该元素没有直接前趋。 (6)后继函数NEXT(L,x):若x的位序小于LENGTH(L),则结果为该元素的直接后继,否则,给出一个特殊值,示出x无直接后继。 2.2 线性表的顺序存储 在具体实现时,可利用高级程序设计语言中的一维数组即向量来为线性表的顺序存储开辟存储空间,存储空间大小应大于等于线性表长度,用一个整型变量来表示线性表的长度,从而可将顺序表描述为: # define MAXSIZE 999 typedef int elemtype ; /* elemtype表示元素类型,此处设为 int */ typedef struct {elemtype vec[MAXSIZE]; int len; }sequenlist ; 在上面描述中,顺序表是一个结构体类型。其中,vec成员(又称为数据域)指线性表数据元素所占用的存储空间,而len成员(又称为长度域)则用于存储线性表长度,它表示线性表最后一个元素在向量中的位置,elemtype 则为线性表中数据元素类型。 本节讨论在定义线性表顺序存储结构之后,如何在这种结构上实 现有关数据运算。下面重点讨论线性表的数据元素的插入和删除运算。 1.插入运算 线性表的插入运算是指在表的第i个元素之前插入一个新的数据元素,插入的结果使得线性表的长度由n变为n+1,线性表的数据元素间的逻辑关系发生了变化,使得物理存储顺序也发生相应的变化。插入过程如图2.2所示。 2.3 线性表的链式存储结构 2.4 线性表存储结构的选择 2.5 线性表的应用举例
文档评论(0)