- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-2线性表
第二章 线性表§2.1 线性表的定义一、特点:有头有尾,一一对应二、线性表的定义及运算 线性表是n个数据元素的有限序列。 1、用二元方程定义: L= ( D ,R ) 2、运算:插入、删除、查找、排序§2.2 线性表的顺序存储方式顺序存储方式是用一组地址连续的存储单元依此存放线性表中的数据元素。(1)线性表中所有元素的所占存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。一、顺序存储的特点假设:①线性表在内存中的起始地址为b②每个元素占L个单元特点:1、逻辑上相邻的元素,其存储位置也相邻2、随机存取 adr[ai]=adr[a1]+(i-1)*L【例1】已知一维数组A[N],设A[18]的终地址为2135H,每个元素占4个单元。计算A[5]的起始地址。20FEH【例2】一维数组a[n],其中a[1]的起始地址为10EDH,第m个元素占m个字节,求a[15]的终地址。二、顺序表的插入及删除操作1、插入 原来表(a1,a2…an) 现在表(a1,a2…ai-1,e,ai…an) 在第i个元素之前插入e,则要向下移动n-i+1个元素。设表长为n,在第i 个元素前插入一个数据元素,要移动(n-i+1)个元素。2、删除 设表长为n,要删除第i个元素, 则移动(n-i)个元素。三、插入与删除的时间复杂度??1、插入:平均移动次数 E …………………..O(n) 其中Pi是在第i个位置前插入元素的概率2、删除:四、线性表的应用(Joseph环)1、设有n个人围成一圆桌,设从第s人开始报数,数到第m人出列。然后从下一位开始重新报数,数到第m人又出列,一直到全部出列。对于任意给定的n,m,s,求出列次序。2、算法⑴置初值S1←S⑵报数出列,循环 i 以-1为步长,从n → 2执行 a. S1←(S1+m-1) MOD i b. 若S1=0 , 则S1← i c. w←P[s1] d. 循环j 从S1到(i-1)执行P[j]←P[j+1] e. P[i]←w⑶逆转向量P循环k从1→[n/2]执行 a.w←P[k] b.P[k]←P[n-k+1] c.P[n-k+1]←w3、分析:初=812456783i=712457863i=624578163i=524785163i=447825163i=347825163i=274825163设n=8,s=1,m=3五、线性表的链式存储方式datanext顺序存储的缺点: ①做插入、删除运算时要移动大量元素。②当线性表长度可变时,必须预留空间,造成空间浪费。③会由于估计不足造成溢出。链式存储——用一组任意的存储单元存放线性表中 的数据。除了存放数据元素本身的信息 外,还要存放该数据的直接后续的数据 元素的存储地址。1、单链表地址数据域指针域18A197C1313D2525ENULL19B7 画出逻辑状态特点:1、单链表的存取需从头指针开始 2、插入删除操作不需要移动元素,只要修改 指针 3、最后一个结点的地址域始终为空L→3FFCH4000HA4008HB4010HC4014HD∧E400CHF4004H(A , C , F , B , E , D)【例】某线性表在内存中的存储如下,L指向头节点,则画出线性表的逻辑结构。2、单链表的插入及删除操作(1)插入在元素ai-1和ai之间插入元素e【例】要求在指针p前面插入结点① q=head ② while( q-next !=p) do ③ {q= q-next } ④ s=(LinkList)malloc(sizeof(LNode))⑤ q-next =s⑥ s-next =pheadp…………(2) 删除 p→next = p→next→next【例一】简单算法的描素——读算法1)在带头结点的非空单链表中,设p不是尾结点。 ABC (Linklist L) { q=L; while(q-next!=p) q=q-next; if (p-next!=NULL) { r=p-next; q-next=r; p-next=r-next; r-next=p; } }2) ABC( ) P=L→next; L→next=NULL; While (p) { s=p; p=p→next; s→next=L→next; L→next=s; }【例二】简单算法的描素——写算法1)List length (L) //计算带头结点的链表长度解:Status Listlength(Linklist L) { P=L; j=0; //初始化 while(P→next) { P=P→next; ++j} return (j); }2)Locat(
文档评论(0)