数据结构第二章线性表1.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第二章线性表1

数据结构 第二章 线性表 重庆一中 葛静 例2-1 线性表的例子 线性表的抽象数据类型表示 2.2.1 顺序表 线性表的顺序存储 Type list=record vec:array[1..m0] of elemtype; len:integer; End; Var L:list; 1、setnull(L) L.len:=0; 操作结果:构造一个空的线性表L。 2、length(L) return(L.Len);初始条件:线性表L存在。操作结果:返回L中的元素个数。 3、向线性表的第i个元素插入一个元素 步骤: (1)检查存储空间是否已经满,若满,则“溢出”。 (2)检查i是否超范围1=i=n+1,若是,则“超出范围” (3)将线性表中第i个元素和后面所有元素均后移一位。 (4)将新元素写在第i个位置上。 (5)线性表长度加1. 线性表的抽象数据类型表示 3、向线性表的第i个元素插入一个元素的算法描述 Insert(L,i,x); Begin if L.len=m0 then writeln(‘overflow’); if (i1)or(iL.len+1) then writeln(‘out of range’); for j:=L.len downto i do L.vec[j+1]:=L.vec[j]; L.vec[i]=x; L.len:=L.len+1; End; 算法复杂度分析:算法第1、2步根据情况可省略。时间复杂度主要取决于第3步,即for循环的次数,也就是向后移动的元素个数。当i=n+1时,最好情况,元素不移动,当i=1时,最坏情况,移动n次。假定在线性表的任何位置上插入元素的概率相同,为pi=1/(n+1),1=i=n+1,则元素平均移动的次数为: Pi(n+n-1+n-2+……+0)=pi (n(n+1)/2)=n/2 故最坏和平均O(n) 线性表的抽象数据类型表示 4、删除线性表的第i个元素 算法步骤: (1)检查1=i=n,若不是,则“超出范围” (2)若删除的元素有用,则把第i个元素赋值给变参带回。 (3)把第i个元素后面所有的元素前移一位。 (4)线性表长度减1。 算法描述: Delete(L,i,x); Begin if(i1)or(in) then writeln(‘out of range’); x:=L.vex[i]; for j:=i+1 to L.len do L.vec[j-1]:=L.vec[j]; L.len:=L.len-1; End; 时间复杂度分析:最坏,i=n时,不移动元素,i=1时,移动n-1个元素。删除任意元素等概率情况下1/n,1/n(0+1+2+……+n-1)=1/n(n(n-1)/2)=(n-1)/2 故最坏和平均O(n) 线性表的抽象数据类型表示 5、删除给定值等于x的第一个元素。 算法步骤: (1)从线性表的起始元素开始,根X 比较,直到X等于某个元素值(查找成功),或者查完所有元素仍找不到(查找失败)。 (2)若查找失败,则“没有找到”错误处理。 (3)删除其值等于x的元素。 (4)线性表长度减1; 算法描述: Delete(L,x); Begin i:=1; while (i=n)and(L.vec[i]x) do inc(i); if in then writeln(‘not find’) else for j:=i+1 to L.len do L.vec[j-1]:=L.vec[j]; dec(L.len); End; O(n) 线性表的操作 线性表的操作 2.3 线性表的链式存储结构 单链表 单链表 2.3.2单链表的基本操作 建立单链表 3.前插 即实现ListInsert(L, i, e)。讨论将x插入表中节点ai之前的情况。 算法思路:调用算法GetElem(H,i-1),获取节点ai-1的指针p(ai 之前驱),然后申请一个q节点,存入e,并将其插入p节点之后。插入时的指针变化如图2.14所示。 单链表删除 线性表的存储结构 顺序存储结构 用数组类型: list: array [1..max] of elemtp ; 动态链式存储结构 用指针类型: point =^ p_list ; p_list = record data : elemtp ; n

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档