数据结构第四版部分分习题参考的答案.ppt

数据结构第四版部分分习题参考的答案.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
练习题2 习题2.2、23、24、2.5和2.6。 2.2设计一个算法,将x插入到一个有序(从小到大排序)的 线性表(顺序存储结构)的适当位置上,并保持线性表的有 序性 void Insert(sqList*L, ElemType x) i int i=0,j; while (iL-length Ldataix)i++ for (=Llength-l: j=i:j--) LdataLj+1=L-datal; L-datad=x L-length++ 23设计一个算法,将一个带头结点的数据域依次为a1,a2,…, an(n3)的单链表的所有结点逆置,即第一个结点的数据域 变为an,…,最后一个结点的数据域为a1 void Reverse(LinkListL) i LinkListp=L-next, q L-nextENULL while (p=NULL) ∥扫描所有的结点 q=p-next; ∥让q指向中p结点的下一个结点 p-next=L-next ∥总是将中结点作为第一个数据结点 p=gE ∥p指向下一个结点 24设有一个双链表,每个结点中除有pror、data和nxt三个 域外,还有一个访问频度域freq,在链表被起用之前,其值 均初始化为零。每当进行 Locatenode(h,x)运算时,令元素 值为x的结点中freq域的值加1,并调整表中结点的次序,使 其按访问频度的递减序排列,以便使频繁访问的结点总是靠 近表头。试写一符合上述要求的 Locatenode运算的算法。 bool LocateNode(DLinklist h, Elem Type x) I DLinkList p=h-next, q: while(p=NULL p-data!=x) p=p-next; ∥找data域值为x的节点中p if (p==NULL) ∥.找到的情况 return false: ∥找到的情况 I p-freq+ ∥烦度增1 g=p-prior, ∥~q为p前驱节点 while(ql=h q-freqp-freq) (p- prior=q prior;p- priornext=p;∥/交换ψp和咚q的位置 g-next=p-next: if(q-next!NULL)∥p不为最后一个节点时 q-next-prior=q: p-next=q: q-prior=p; q=p-prior: 重指向中p的前趋节点 return true 25设ha=(a1a2…,;an)和hb=(b1,b2,…,bm)是两个带头结点的 循环单链表,编写将这两个表合并为带头结点的循环单链表 hc的算法。 void Merge (* ha, LinkList*hb, LinkList*hc) I LinkListp=ha-next; hc=h while(p-next!ha)∥找到ha的最后一个节点中p p=p-next pnext=hb-next;∥将ha的最后一个节点的nex指向b的第一个数据节点 while(p-next!hb)p=pnext;/找到hb的最后一个节点p p-next=hc ∥构成循环单链表 free(hb) ∥释放hb单链表的头节点 26设非空线性表ha和hb都用带头节点的循环双链表表示。设 计一个算法 Insert(ha,hb,i)。其功能是:i=0时,将线性表hb插 入到线性表ha的最前面;当0时,将线性表hb插入到线性表 ha中第i个节点的后面;当i大于等于线性表ha的长度时,将线 性表hb插入到线性表ha的最后面。 void Insert(DLinkList* ha, DLinkList*hb, int i) DLinklistp=ha-next, q: int lena=l j=0; while(p-next!-ha)∥求出ha的长度lea lena++; p=p-next if(i=0)∥将hb的所有数据结点插入到ha的头结点和第1个数据结点之间 p=hb-prior 指向hb的最后一个结点/ p-next=ha-next; ∥将中p链到ha的第1个数据结点前面 ha-next-prior=p; ha-next=hb-next hb-next-prior=ha; ∥将ha头结点与hb的第1个数据结点链起来 else if (ilena) ∥将hb插入到ha中间 p=ha-next while gii) ∥在ha中查找第i个结点p p=p-next; q=p-next /指向中结点的后继结点/ p-next=hb-next; /hb- prior指向hb的最后一个结点 hb-next-prior=p; hb-prior-nextq; q-prior=hb-prior; else ∥将hb链到ha之后 ha-

文档评论(0)

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

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

1亿VIP精品文档

相关文档