部分习题参考答案教学课件_第1页
部分习题参考答案教学课件_第2页
部分习题参考答案教学课件_第3页
部分习题参考答案教学课件_第4页
部分习题参考答案教学课件_第5页
已阅读5页,还剩54页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

练习题2习题2.2、23、24、2.5和2.6。2.2设计一个算法,将x插入到一个有序(从小到大排序)的线性表(顺序存储结构)的适当位置上,并保持线性表的有序性voidInsert(sqList*&L,ElemTypex)iinti=0,j;while(i<L->length&L>datai<x)i++for(=L>length-l:j>=i:j--)L>dataLj+1=L->datal;L->datad=xL->length++23设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n>3)的单链表的所有结点逆置,即第一个结点的数据域变为an,…,最后一个结点的数据域为a1voidReverse(LinkList"&L)iLinkList"p=L->next,qL->nextENULLwhile(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运算的算法。boolLocateNode(DLinklisth,ElemTypex)IDLinkListp=h->next,q:while(p=NULL&p->data!=x)p=p->next;∥找data域值为x的节点中pif(p==NULL)∥.找到的情况returnfalse:∥找到的情况Ip->freq+∥烦度增1g=p->prior,∥~q为p前驱节点while(ql=h&q->freq<p->freq)(p->prior=q>prior;p->prior>next=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的前趋节点returntrue25设ha=(a1a2…,;an)和hb=(b1,b2,…,bm)是两个带头结点的循环单链表,编写将这两个表合并为带头结点的循环单链表hc的算法。voidMerge(*ha,LinkList*hb,LinkList*&hc)ILinkList"p=ha->next;hc=hwhile(p->next!ha)∥找到ha的最后一个节点中pp=p->nextp>next=hb->next;∥将ha的最后一个节点的nex指向b的第一个数据节点while(p->next!hb)p=p>next;/找到hb的最后一个节点pp->next=hc∥构成循环单链表free(hb)∥释放hb单链表的头节点26设非空线性表ha和hb都用带头节点的循环双链表表示。设计一个算法Insert(ha,hb,i)。其功能是:i=0时,将线性表hb插入到线性表ha的最前面;当>0时,将线性表hb插入到线性表ha中第i个节点的后面;当i大于等于线性表ha的长度时,将线性表hb插入到线性表ha的最后面。voidInsert(DLinkList*&ha,DLinkList*&hb,inti)DLinklist"p=ha->next,"q:intlena=lj=0;while(p->next!-ha)∥求出ha的长度lealena++;p=p->nextif(i=0)∥将hb的所有数据结点插入到ha的头结点和第1个数据结点之间p=hb->prior指向hb的最后一个结点/p->next=ha->next;∥将中p链到ha的第1个数据结点前面ha->next->prior=p;ha->next=hb->nexthb->next->prior=ha;∥将ha头结点与hb的第1个数据结点链起来elseif(i<lena)∥将hb插入到ha中间p=ha->nextwhilegi<i)∥在ha中查找第i个结点pp=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->prior->next=hb->next;/ha->prior指向ha的最后一个结点hb->next->prior=ha->priorhb->prior->next=ha;ha->prior=hb->priorhb);∥释放hb头结点练习题3习题3.1、3.2、3.3、3.4和3.6。3有5个元素,其进栈次序为:A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先出栈(即C第一个且D第二个出栈)的次序有哪几个?答:要使C第一个且D第二个出栈,应是A进栈,B进栈,C进栈,C出栈,D进栈,D出栈,之后可以有以下几种情况:(1)B出栈,A出栈,E进栈,E出栈,输出序列为CDBAE;(2)B出栈,E进栈,E出栈,A出栈,输出序列为CDBEA;(3)E进栈,E出栈,B出栈,A出栈,输出序列为CDEBA所以可能的次序有:CDBAE、CDBEA、CDEBA32假设以和O分别表示进栈和出栈操作,栈的初态和终栈均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列(1)下面所示的序列中哪些是合法的?AIOIOIOOB.IOOIOIIOC.IIOIOIOD.IIOOIOO(2)通过对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论