算法第二章课件.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法第二章课件

第二章?????? 线性表 ? 一 、内容提要 ? 1.线性表是元素间约束力最强的一类数据结构。 2.线性表的逻辑结构定义,对线性表定义的操作。 3.线性表的存储结构:顺序存储结构和链式存储结构。 4.线性表的操作在两种存储结构中的实现。 5.一元多项式的线性表表示方法,及高次(稀疏)多项式的抽象数据类型定义、表示和加法的实现。 ? 二 、学习重点 ? 1.? 2.? 3.? 4.? 5.? 6.? 7.? p:=la^.next,而在静态链表中则i:=sa[0].next;相对p:=p^.next,有i:=sa[i].next来找到第i个元素的后继。 ? 三、例题解析 ? 1.设线性表以顺序存储结构存于a(1..n)中,试编写算法将该线性表就地逆置。   【分析】 向量逆置有几种方法,如逆向读入到另一数组中,在正向对应赋值,即: FOR i:=n DOWNTO 1 DO b[n-i+1]:=a[i]; FOR i:=1TO n DO a[i]:=b[i]; 这里要求“就地逆置”,即不能另用一数组空间。 【算法】      PROC invert(VAR a:arr; n:integer);    {a是存储线性表的一维数组,有n 个元素,本算法将a逆置。} FOR i:=1TO (n DIV 2) DO a[i]?a[n-i+1]; endp; 【讨论】 将n个元素的一维数组逆置,为什么循环控制变量用n div 2,而不用n? ?          2.编写在单链表上进行排序的算法            【分析】 这里使用插入排序。链表中插入元素要知道待插入元素位置的前驱,  以pre表示之。结束的条件是链表为空。      【算法】  PROC insertsort(VAR la:linklist); {la是带头结点的单链表的指针,本算法将链表中元素正序排序。算法的基本思想是先假定第一个元素有序,然后从第二个元素开始,依次插入到有序的表中,直到全部元素插入完为止}                  p:= la^.next^.next;{假定链表非空,即至少有一个结点}                  la^.next^.next:=nil;{设有序链表中当前只有一个结点} found:=false;                  WHILE (pnil)AND NOT found DO [s:=p^.next;{记住下一个结点}                    pre:=la; q:=la^.next;    found:=false;              WHILE(qnil)AND NOT found DO IF q^.datap^.data THEN [pre:=q; q:=q^.next] ELSE found:=true; p^.next:=q; pre^.next:=p;{p结点插入} p:=s;{取下一个结点} ] ENDP; {insertsort} 【讨论】算法中found为一布尔变量,为的是在链表到尾前,如找到p的插 入位置,即可退出WHILE循环。这里循环条件未写成: (pnil)AND (q^.datap^.data) 因为若q=nil ,则再引用q^.data是无意义的。请记住这种退出循环,引入布尔变量的作法。 3.设两个非递减有序的线性表各有m和n个元素(m0,n0),分别存于一维数组a和b中,且a 的存储空间足够大。试编写算法将两线性表合并成一线性表,结果仍是非递减有序,要求算法的时间复杂度是o(m+n)。 【分析】 两个有序线性表合并成一个有序表,教材中已有讨论,算法非常简单。本算法要求复杂度为O(m+n),这是着重点。题目叙述中有“a的空间足够大”,暗示出若将m+n个元素合并到a中,不会溢出。为使数据移动次数最少,应先将两表中最大元素置于m+n的位置上

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档