数据结构课件第7节.ppt

  1. 1、本文档共93页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
begin crtlists(st, ls2);  new(ls1); ls1^.tag:=1;  ls1^.hp:=ls2; ls1^.tp:=ls;  ls:=ls1 end;  procedure Tgyb.prnt;  var i, ix, iy: integer; s: char;  begin lsi:=1;  prt(ls); {将广义表ls转换成书写形式后存入数组lsa中} …… ix:=10; iy:=10;  for i:= 1 to lsi-1 do begin s:=lsa[i];  {在绘图板的(ix, iy)位置中显示字符s;}  ix:=ix+20 end end; 在这个类的实现中,head、tail及merg操作的处理过程都比较简单,crt操作所涉及的crtlists过程以及prnt操作所涉及的prt过程均已在前节中作过讨论,这里尚需说明的是:  在prt过程中,我们使用了write语句输出广义表书写形式中的每一个字符。但在演示程序中,为了将结果显示在绘图板上, 先将输出的字符集中输出在一个数组(lsa)中,然后再将该数组中的字符串显示在绘图板上。 程序如下: function member (e, ls: point): boolean;  var b1, b2: boolean;  begin if ls=nil then result:=false else begin b1:= equal(e, ls^.hp);  b2:=member(e, ls^.tp);  result:=b1 or b2;  end end; 7.3.3 复制广义表 我们已经知道, 任何一个非空的广义表均可分解成表头和表尾,反之,一对确定的表头和表尾可唯一确定一个广义表。 由此可见,复制一个广义表只要分别复制其表头和表尾,然后合成即可。假设ls为原表,newls为复制表, 则复制广义表的递归过程可表示为  procedure copyls (ls: point, var newls: point);  其中,参数ls表示原表,newls表示复制表, 其类型均为结点指针类型point,该过程的功能:复制广义表ls的一个副本newls。 即生成一个ls的副本并由newls指向它。 处理过程:若ls为nil则newls也为nil, 否则,生成一个新的表结点,并按原表是单元素或列表两种情形分别处理。若原表是单元素,则复制元素值;若原表是列表,则分别复制其表头和表尾,并分别挂在新生结点的头尾指针域上。  上述复制表头并将新表头的指针挂在新生结点的头指针域上, 这一处理过程正好可通过递归调用copyls(ls^.hp, newls^.hp)来完成, 因为copyls的功能就是要按第一个参数所指向的广义表生成一个副本,并由第二个参数中的指针来指向它。同样,复制表尾并将新表尾的指针挂在新生结点的尾指针域上,这一处理过程正好可通过递归调用copyls(ls^.tp, newls^.tp)来完成。 程序如下: procedure copyls (ls: point, var newls: point);  begin if ls=nil then newls:=nil  else begin new(newls); newls^.tag:=ls^.tag;  if ls^.tag=0 then newls^.data:=ls^.data else begin copyls(ls^.hp, newls^.hp);  copyls(ls^.tp, newls^.tp) end end end; 7.3.4 求广义表的深度 广义表的深度可定义为广义表中括号的层数,是广义表的一种量度。当广义表为单元素时,其深度为0;当广义表为空表或其所有的成员均为单元素时,其深度为1;否则,广义表的深度与其成员的深度有关,它总是比成员中最大的深度还要大1。因此,我们可以采用如下的递归的形式来定义广义表ls的深度depth。 对于广义表ls=(a1, a2, …, ai, …,

文档评论(0)

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

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

1亿VIP精品文档

相关文档