- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环链表结点在双向链表
第2章 线性表 第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3 线性表的链式存储结构 2.4 线性表两种存储结构比较 2.1 线性表的逻辑结构 例2-1 26 个英文字母组成的字母表: (A,B,C,… ,Z) 是一个线性表,表中数据元素是单个字母字符。 2.1.1 线性表的定义 2.1.2 线性表的基本操作 1) InitList(L):初始化操作,构造一个空线性表L 2)ClearList(L):清除线性表L的内容,将L置为空表 3)ListLength(L):求表长(表中元素个数) 4)Ins(L,i,Item):插入数据 5)Del(L,i):删除数据 6)GetNode(L,i):获取表L中位置i的结点值 7)Loc(L,Item):定位(按值查找) 8)GetPrior(L,Item,p):获取值为Item的结点的前趋结点 9)GetNext(L,Item,p) :获取值为Item的结点的后继结点 2.2 线性表的顺序存储 线性表的顺序存储表示 2.2.1 线性表的顺序存储表示 概念: 用一组地址连续的存储单元依次存储线性表中的各个数据元素,称为线性表的顺序存储 线性表的顺序存储结构: 由于线性表的长度可变,且所需要的最大存储空间随问题不同而不同,所以在 C 语言中可以使用动态分配的一维数组。线性表的顺序存储结构描述如下所示。 2.2.2 基本操作在顺序表上的实现 1. 查找操作 (2) 算法描述 int Locate(SeqList L, ElemType e) /*在顺序表L查找与e相等的元素,若L.elem[i]=e,则找到该元素,并返回i+1,若找不到,则返回”-1”*/ 2. 顺序线性表的插入算法 (1) 算法思想 在一般情况下,在第 i(1≤i≤n )个元素之前插入一个元素时,需要将 n 至第 i(共 n-i+1)个元素向后移动一个位置。 检查插入要求的有关参数的合理性; 把原来第 n 个数据元素至第 i 个数据元素依次往后移一个数组元素位置; 把新数据元素放在第 i 个位置上; 修正线性表的数据元素个数。 (2) 算法描述 #define OK 1 #define ERROR 0 Int InsList ( SeqList *L, int i, ElemType e ) /*在顺序线性表 L 中第 i 个位置插入新的元素 e。 i 的合法值为 1≤i ≤L- last+2 */ if ( L-last=MAXSIZE-1) { printf(“表已满无法插入”); return(ERROR); } (3) 算法分析 算法InsList的基本操作是数据元素后移操作。执行元素后移的次数是 n – i + 1。可以看到:移动元素的次数不仅和线性表的长度 n 有关,而且还与插入元素的位置 i 有关。当 i = n + 1 时,无须移动元素;当 i = 1 时,则元素后移执行 n 次。也就是说,该算法在最好的情况下时间复杂度是 O(1),在最坏的情况下时间复杂度是 O(n)。 设Eins为在长度为n的表中插入一个元素所需移动元素的平均次数,假设Pi为在第i个元素之前插入元素的概率,并假设在任何位置上插入的概率相同 3. 顺序线性表的删除算法 (1) 算法思想 在一般情况下,删除第 i 个元素时,需要将 n 至第 i+1 个(共 n-i)元素向前移动一个位置。 (2) 算法描述 Int DelList( SeqList *L, int i, ElemType *e ) /* 在顺序线性表 L 中删除第 i 个元素,并用 e 返回其值 i 的合法值为 1≤i ≤ L.last + 1*/ (3) 算法分析 算法DelList的基本操作是数据元素前移操作。执行元素前移的次数是 n - i。可以看到:移动元素的次数不仅和线性表的长度 n 有关,而且还与删除元素的位置 i 有关。当 i = n 时,无须移动元素;当 i = 1 时,则元素前移执行 n - 1 次。也就是说,该算法在最好的情况下时间复杂度是 O(1),在最坏的情况下时间复杂度是 O(n)。 进一步分析算法的平均性能:算法DelList的时间复杂度为 O(n)。 2.2.3 线性表顺序存储的小结 1. 顺序存储结构的优点 线性表顺序存储的小结 线性表的顺序存储结构适用于数据元素不经常变动或只需在顺序存取设备上做成批处理的场合。为了克服线性表顺序存储结构的缺点,可采用线性表的链式存储
文档评论(0)