《历界数据结构考研试题集》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
第1章绪论一、选择题1.算法的计算量的大小称为计算的()。【北京邮电大学2000二、3(20/8分】A.效率B.复杂性C.现实性D.难度2.算法的时间复杂度取决于()【中科院计算所1998二、1(2分)】A.问题的规模B.待处理数据的初态C.A和B3.计算机算法指的是(1),它必须具备(2)这三个特性。(1)A.计算方法B.排序方法(2)A.可执行性、可移植性、可扩充性C.确定性、有穷性、稳定性C.解决问题的步骤序列D.调度方B.可执行性、确定性、有穷性D.易读性、稳定性、安全性【南京理工大学1999一、1(2分)【武汉交通科技大学1996一、1(4分】4.一个算法应该是()。【中山大学1998二、1(2分】A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C.5.下面关于算法说法错误的是()【南京理工大学2000一、1(1.5分】A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C.算法的可行性是指指令不能有二义性D.以上几个都是错误的6.下面说法错误的是()【南京理工大学2000一、2(1.5分】(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度0(n)的算法在时间上总是优于复杂度0(2")的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1)B.(1),(2)C.(1),(4)D.(3)7.从逻辑上可以把数据结构分为()两大类。【武汉交通科技大学1996一、4(2分】A.动态结构、静态结构B.顺序结构、链式结构C.线性结构、非线性结构D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是()。【北方交通大学2000二、1(2分】A.循环队列B.链表C.哈希表D.栈9.以下数据结构中,哪一个是线性结构()?【北方交通大学2001一、1(2分】A.广义表B.二叉树C.稀疏矩阵D.串10.以下那一个术语与数据的存储结构无关?()【北方交通大学2001一、2(2分】D.双向链表)【北京工商大学200110(3A.栈B.哈希表C.线索树11.在下面的程序段中,对x的赋值语句的频度为(分】FORi:=lTOnDOFORj:=lTOnDOx:=x+l;A.0(2n)B.0(n)C.0(n2)D.0(log2n)12.程序段FORi:=n-lDOWNTO1DOFORj:=lTOiDO
1IFA[j]>A[j+l]THENA[j]与A[j+1]对换;其中n为正整数,则最后一行的语句频度在最坏情况下是()A.0(n)B.O(nlogn)C.0(n3)D.0(n2)【南京理工大学1998—、1(2分)】13.以下哪个数据结构不是多型数据类型()【中山大学1999一、3(1分)】A.栈B.广义表C.有向图D.字符串14.以下数据结构中,()是非线性数据结构【中山大学1999一、4]A.树B.字符串C.队D.栈15.下列数据中,()是非线性数据结构。【北京理工大学2001六、1(2分)】A.栈B.队列C.完全二叉树D.堆16.连续存储设计时,存储单元的地址().【中山大学1999一、1(1分】A.一定连续B.一定不连续C.不一定连续D.部分连续,部分不连续17.以下属于逻辑结构的是()。【西安电子科技大学应用2001一、1】A.顺序表B.哈希表C.有序表D.单链表二、判断题1.数据元素是数据的最小单位。()【北京邮电大学1998一、1(2分)】【青岛大学2000—、1(1分】【上海交通大学1998一、1】【山东师范大学2001一、1(2分)】2.记录是数据处理的最小单位。()【上海海运学院1998一、5(1分】3.数据的逻辑结构是指数据的各数据项之间的逻辑关系;()【北京邮电大学2002—、1(1分】4.算法的优劣与算法描述语言无关,但与所用计算机有关。()【大连海事大学2001一、10(1分】5.健壮的算法不会因非法的输入数据而出现莫名其妙的状态。()【大连海事大学2001一、11(1分】6.算法可以用不同的语言描述,如果用C语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。()【西安交通大学1996二、7(3分)】7.程序一定是算法。()【燕山大学1998二、2(2分)并改错】8.数据的物理结构是指数据在计算机内的实际存储形式。()【山东师范大学2001—、2(2分)】9.数据结构的抽象操作的定义与具体实现有关。()【华南理工大学2002一、1(1分】10.在顺序存储结构中,有时也存储数据结构中元素之间的关系。()【华南理工大学2002一、2(1分】11.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。()【上海海运学院1999一、1(1分】12.数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。()【华南理工大学2002一、5(1分】13.数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构.()【上海海运学院1998一、1(1分】三、填空1.数据的物理结构包括的表示和的表示。【燕山大学1998一、1(2
2分】1.对于给定的n个元素,可以构造出的逻辑结构有(1),⑵,(3),(4)四种。【中科院计算所1999二、1(4分)】2.数据的逻辑结构是指。【北京邮电大学2001二、1(2分】3.一个数据结构在计算机中称为存储结构。【华中理工大学2000•、1(1分】4.抽象数据类型的定义仅取决于它的一组(1),而与(2)无关,即不论其内部结构如何变化,只要它的(3)不变,都不影响其外部使用。【山东大学2001三、3(2分】5.数据结构中评价算法的两个重要指标是【北京理工大学2001七、1(2分)】6.数据结构是研讨数据的(1)和(2),以及它们之间的相互关系,并对与这种结构定义相应的(3),设计出相应的(4)。【西安电子科技大学1998二、2(3分】7.一个算法具有5个特性:(1)、⑵、(3),有零个或多个输入、有一个或多个输出。【华中理工大学2000一、2(5分】【燕山大学1998一、2(5分】8.已知如下程序段FORi:=nDOWNTO1DO{语句1}BEGINx:=x+l;{语句2}FORj:=nDOWNTOiDO{语句3}y:=y+l;{语句4}END;语句1执行的频度为(1);语句2执行的频度为(2);语句3执行的频度为(3);语句4执行的频度为(4)。【北方交通大学1999二、4(5分】9.在下面的程序段中,对x的赋值语句的频度为(表示为n的函数)FORi:=1TOnDOFORj:=1TOiDOFORk:=1TOjDOx:=x+delta;【北京工业大学1999一、6(2分】10.下面程序段中带下划线的语句的执行次数的数量级是:【合肥工业大学1999三、1(2分】i:=1;WHILEi 314.设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5,有5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1.①以下是该函数的程序段,请将未完成的部分填入,使之完整intf(m,n)intm,n;{if(m==l)return(1);if(n==l){return(2);}if(m 410.若将数据结构定义为一个二元组(D,R),说明符号D,R应分别表示什么?【北京科技大学2001一、1(2分】11.数据结构与数据类型有什么区别?【哈尔滨工业大学2001三、1(3分】12.数据的存储结构由哪四种基本的存储方法实现?【山东科技大学2001一、1(4分】13.若有100个学生,每个学生有学号,姓名,平均成绩,采用什么样的数据结构最方便,写出这些结构?【山东师范大学1996二、2(2分】14.运算是数据结构的一个重要方面。试举一例,说明两个数据结构的逻辑结构和存储方式完全相同,只是对于运算的定义不同。因而两个结构具有显著不同的特性,是两个不同的结构。【北京大学1998—、1(5分】15.在编制管理通讯录的程序时,什么样的数据结构合适?为什么?【长沙铁道学院1998四、3(6分)】16.试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其运算效率不同。【北京理工大学2000三、1(4.5分】17.有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=0(2”),A2的时间复杂度为T2=0(rO,仅就时间复杂度而言,请具体分析这两个算法哪一个好。【北京航空航天大学2000二(10分】18.设计一数据结构,用来表示某一银行储户的基本信息:账号、姓名、开户年月日、储蓄类型、存入累加数、利息、帐面总数。【浙江大学1994一、3(5分)】19.写出下面算法中带标号语句的频度。TYPEar=ARRAY[l..n]OFdatatype;PROCEDUREperm(a:ar;k,n:integer);VARx:datatype;i:integer;BEGIN(1)IFk=nTHENBEGIN(2)FORi:=lTOnDO(3)write(a[i]);writein;ENDELSEBEGIN(4)FORi:=kTOnDO(5)a[i]:=a[i]+i*i;(6)perm(a,k+1,n);END;END;设k的初值等于1。【北京邮电大学1997二(10分】20.分析下面程序段中循环语句的执行次数。i:=0;s:=0;n:=100;REPEATi:=i+l;s:=s+10*i;UNTILN0T((i 5PROCEDUREInc(VARa:num);VARi:integer;BEGINi:=n;WHILEA[i]=lDOBEGINA[i]:=0:i:=i-l;END;END;A[i]:=1;ENDInc;【东南大学1998三(8分)1994二(15分】20.阅读下列算法,指出算法A的功能和时间复杂性PROCEDUREA(h,g:pointer);(h,g分别为单循环链表(singlelinkedcircularlist)中两个结点指针)PROCEDUREB(s,q:pointer):VARp:pointer;BEGINP:=s;WHILEp 6extOqDOp:=p 7ext;p 8ext:=s;END;(ofB)BEGINB(h,g);B(g,h);END;(ofA)【东南大学1999二(10分】21.调用下列C函数f(n)或PASACAL函数f(n)回答下列问题:(1)试指出f(n)值的大小,并写出f(n)值的推导过程;(2)假定n=5,试指出f(5)值的大小和执行f(5)时的输出结果。C函数:intf(intn){inti,j,k,sum=0;for(i=l;i 9END(1)fori-1tondoforj*-ltondox-x+1endend【中科院自动化研究所1995二、2(6分】24.斐波那契数列Fn定义如下Fo=O,F)=l,Fn=Fn-i+Fn-2,n=2,3.・・请就此斐波那契数列,回答下列问题。(1)(7分)在递归计算Fn的时候,需要对较小的F»”F*2,…,Fi,Fo精确计算多少次?(2)(5分)如果用大O表示法,试给出递归计算R时递归函数的时间复杂度录多少?【清华大学2000二(12分】25.将下列函数,按它们在n-8时的无穷大阶数,从小到大排序。.一2n,n-n+7n,nlogn,2n/2,n,logn,Q+logn,(3/2)n,I"/,n!,n~+logn【中科院计算所1995] 10第2章线性表-选择题1.下述哪一条是顺序存储结构的优点?()【北方交通大学2001一、4(2分】A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学2001一、14(2分】A.线性表采用顺序存储,必须占用一片连续的存储单元。B.线性表采用顺序存储,便于进行插入和删除操作。C.线性表采用链接存储,不必占用一片连续的存储单元。D.线性表采用链接存储,便于插入和删除操作。3.线性表是具有门个()的有限序列(n>0)。【清华大学1998—、4(2分】A.表元素B.字符C.数据元素D.数据项E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。【哈尔滨工业大学2001二、1(2分】A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。【南开大学2000一、3]A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。A.单链表B.单循环链表C.带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学2000一、1(2分】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用()存储方式最节省运算时间。【北京理工大学2000一、1(2分】A.单链表B.双链表C.单循环链表D.带头结点的双循环链表8.静态链表中指针表示的是().【北京理工大学2001六、2(2分)】A.内存地址B.数组下标C.下•元素地址D.左、右孩子地址9.链表不具有的特点是()【福州大学1998一、8(2分)】A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比10.下面的叙述不正确的是()【南京理工大学1996一、10(2分】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B.线性表在链式存储时,查找第i个元素的时间同i的值无关C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比D.线性表在顺序存储时,查找第i个元素的时间同i的值无关11.线性表的表元存储方式有((1))和链接两种。试指出下列各表中使用的是何种存储方式:表1是((2))存储方式:表2是((3))存储方式;表3是((4))存储方式:表4是((5))存储方式。表左的s指向起始表元。表元编号货号数量表元间联系1618402220523 113103154450120557811766910240表元编号货号数量表元间联系16184052205213103154450120257811766910243表元编号货号数量表元间联系16184052205213103154450120057811766910243表兀编号货号数量表元诃联系1216184052220521031031546450120035781176169102435供选择的答案:A.连续B.单向链接C.双向链接D.不连接E.循环链接F.树状G.网状H.随机I.顺序J.顺序循环【上海海运学院1995二、1(5分】11.(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。以上错误的是()【南京理工大学2000一、3(1.5分】A.(1),(2)B.(1)C.(1),(2),(3)D.(2)12.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(l<=i<=n+l)。【北京航空航天大学1999一、1(2分)】A.0(0)B.0(1)C.0(n)D.0(n2)13.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为()。 12A.0(n)0(n)B.0(n)0(1)C.0(1)0(n)D.0(1)0(1)D.0(i-1)【中山大学1999一、)。【武汉大学2000二、10]C.p=NILD.p=head【青岛大学2000五、1(2分】15.线性表(al,a2,an)以链接方式存储时,访问第i位置元素的时间复杂性为()A.0(i)B.0(1)C.0(n)2]16.非空的循环单链表head的尾结点pt满足(A.pt.link=headB.pt.link=NIL17.循环链表H的尾结点P的特点是()。【中山大学1998二、2(2分】A.P,NEXT:=HB.P.NEXT:=H.NEXTC.P:=HD.P:=H.NEXT18.在一个以h为头的单循环链中,p指针指向链尾的条件是()【南京理工大学1998—、15(2分】A.p-.next=hB.p八.next=NILC.p'.next."next=hD.p-.data=-l19.完成在双循环链表结点p之后插入s的操作是():【北方交通大学1999一、4(3分】A.p".next:=s;s..priou:=p;p*.next-.priou:=s;s*.next:=p".next:B.p".next-.priou:=s;p*.next:=s;s.priou:=p;s*,next:=p.next;C.s.priou:=p;s.next:=p.next;p.next:=s;p.next.priou:=s;D.s.priou:=p;s.next:=p*.next;p.next.priou:=s;p.next:=s;20.在双向循环链表中,在p指针所指向的结点前插入一个指针q所指向的新结点,其修改指针的操作是()。【北京邮电大学1998二、2(2分】注:双向链表的结点结构为(11ink,data,rlink)o供选择的答案:A.pt.11ink:=q;qt.rlink:=p;pt.11inkt.rlink:=q;qt.llink:B.pt.llink:=q;pt.llinkt.rlink:=q;qt.rlink:=p;qt.llink:=pt.llink;C.qt.rlink:=p;qt.llink:=pt.llink;pt.llinkt.rlink:=q;pt.llink:=q;D.qf.llink:=pt.llink;qt.rlink:=p;pt.llink:=q;pf.llink:=q;(编者按:原题如此)21.在非空双向循环链表中q所指的结点前插入一个由p所指的链结点的过程依次为:rlink(p)-q;llink(p)-llink(q);llink(q)-p;()A•rlink(q)-pB.rlink(llink(q))-pC.rlink(llink(p))-pD.rlink(rlink(p))-p【北京航空航天大学2000一、1(2分】22.双向链表中有两个指针域,llink和rlink,分别指回前驱及后继,设p指向链表中的一个结点,q指向一待插入结点,现要求在P前插入q,则正确的插入为()【南京理工大学1996一、1(2分】A.p八.llink:=q;q人.rlink:=p;p八.llink八.rlink:二q;llink:=p\llink;B.q".llink:=p\llink;p人.llink.rlink:=q;q八.rlink:二p;p.llink:=q.rlink;C.q\rlink:=p;p.rlink:=q;p.llink.rlink:=q;q\rlink:=p;D.p\llink.rlink:=q;q.rlink:=p;llink:=p\llink;p.llink:=q;23.在双向链表指针p的结点前插入一个指针q的结点操作是(【青岛大学2000五、 132(2分】A.p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q;B.p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;C.q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;D.q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;24.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()oA.p->next=s;s->next=p->next;B.s->next=p->next;p->next=s;C.p->next=s;p->next=s->next;D.p->next=s->next;p->next=s;【青岛大学2001五、3(2分】25.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()A.head==NULLB.head->next=NULLC.head—knext==headD.head!=NULL【北京工商大学2001一、5(3分】26.在双向链表存储结构中,删除p所指的结点时须修改指针()。A.(p-.llink)*.rlink:=p-.rlinkB.p".llink:=(p.llink)llinkC.(p.rlink)*.llink:=pD.p".rlink:=(p.llink)llink【西安电子科技大学1998一、(p*.rlink)llink:=p".llink;(p-.llink)rlink:=p;p".rlink:=(p.rlink)*.rlinkp".llink:=(p.rlink)*.rlink;(2分]27.双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去P所指结点,则正确的删除是()(链中结点数大于2,p不是第一个结点)A.p.llink.rlink:=p*.llink;p.llink.rlink:=p.rlink;dispose(p);B.dispose(p);p.llink".rlink:=p*.llink;p.llink",rlink:=p*.rlink;C.p.llink.rlink:=p-.llink;dispose(p);p.llink".rlink:=p*.rlink;D.以上A,B,C都不对。【南京理工大学1997一、1(2分】二、判断1.链表中的头结点仅起到标识的作用。()【南京航空航天大学1997一、1(1分】2.顺序存储结构的主要缺点是不利于插入或删除操作。()【南京航空航天大学1997—、3(1分】4.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。()【北京邮电大学1998一、2(2分】5.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。()【北京邮电大学2002一、2(1分】6.对任何数据结构链式存储结构一定优于顺序存储结构。()【南京航空航天大学1997-、3(1分】7.顺序存储方式只能用于存储线性结构。()【中科院软件所1999六、1-2(2分)】【上海海运学院1997一、1(1分】8.集合与线性表的区别在于是否按关键字排序。()【大连海事大学2001->5(1分)】9.所谓静态链表就是一直不发生变化的链表。()【合肥工业大学2000二、1(1分】10线性表的特点是每个元素都有一个前驱和一个后继。()【合肥工业大学2001二、1(1分】11.取线性表的第i个元素的时间同i的大小有关.()【南京理工大学1997二、9(2分】 141.循环链表不是线性表.()【南京理工大学1998二、1(2分】2.线性表只能用顺序存储结构实现。()【青岛大学2001四、2(1分】3.线性表就是顺序存储的表。()【青岛大学2002一、1(1分】4.为了很方便的插入和删除数据,可以使用双向链表存放数据。()【上海海运学院1995一、1(1分】【上海海运学院1997一、2(1分】5.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。()【上海海运学院1996一、1(1分】【上海海运学院1999一、1(1分】6.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。()【上海海运学院1998—、2(1分】三、填空1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用存储结构。【北方交通大学2001二、4]2.线性表L=(al,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是.【北方交通大学2001二、9]3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:;;【华中理工大学2000一、4(2分】4.在一个长度为n的顺序表中第i个元素(l<=i〈=n)之前插入一个元素时,需向后移动个元素。【北京工商大学2001二、4(4分】5.在单链表中设置头结点的作用是.【哈尔滨工业大学2000二、1(1分】6.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为,在给定值为x的结点后插入一个新结点的时间复杂度为。【哈尔滨工业大学2001一、1(2分】7.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成和而又根据指针的连接方式,链表又可分成和【西安电子科技大学1998二、4(3分】8.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是、、、.【中国矿业大学2000—、1(3分】9.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s".next:=p;s.prior:=;p".prior:=s;:=s;【福州大学1998二、7(2分)】10.链接存储的特点是利用来表示数据元素之间的逻辑关系。【中山大学1998一、1(1分】11.顺序存储结构是通过表示元素之间的关系的;链式存储结构是通过表示元素之间的关系的。【北京理工大学2001七、2(2分)】12.对于双向链表,在两个结点之间插入一个新结点需修改的指针共个,单链表为个。【南京理工大学2000二、2(3分】13.循环单链表的最大优点是:。【福州大学1998二、3(2分)】14.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:【合肥工业大学1999三、2(2分】15.带头结点的双循环链表L中只有一个元素结点的条件是: 15【合肥工业大学1999三、32000三、2(2分】1.在单链表L中,指针p所指结点有后继结点的条件是:【合肥工业大学2001三、3(2分】17.带头结点的双循环链表L为空表的条件是:o【北京理工大学2000二、1(2分】【青岛大学2002三、1(2分】18.在单链表p结点之后插入s结点的操作是:©南岛大学2002三、2(2分】19.请在下列算法的横线上填入适当的语句。【清华大学1994五(15分】FUNCTIONinclusion(ha,hb:linklisttp):boolean;{以ha和hb为头指针的单链表分别表示有序表A和B,本算法判别表A是否包含在表B内,若是,则返回“true”,否则返回“false”}BEGINpa:=ha 16ext;pb:=hb 17ext;(1);WHILE(2)DOIFpa二data二pb二dataTHEN(3)ELSE(4);⑸END;20.完善算法:己知单链表结点类型为:TYPEptr=node;node=RECORDdata:integer;next:ptrEND;过程create建立以head为头指针的单链表。PROCEDUREcreate((1)):VARp,q:ptr;k:integer;BEGINnew(head);q:二head;read(k);WHILEk>0DOBEGIN12).;皿也;read(k)END;q.next:=NIL;END;【北京师范大学1999三】21.已给如下关于单链表的类型说明:TYPElist=node;node=RECORDdata:integer;next:list;END;以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这里两链表的头指针分别为P和q.PROCEDUREmergelink(VARp,q:list):VARh,r:list;BEGIN 18(1)h 19ext:=NIL;r:=h;WHILE((pONIL)AND(qONIL))DOIF(p.data<=q.data)THENBEGIN(2);r:=p;p:=p 20ext;ENDELSEBEGIN(3);r:=q;q:=q 21ext;END;IF(p=NIL)THENr 22ext:=q;(4);p:=h 23ext;dispose(h);END;【厦门大学2000三、2(8分)】21.假设链表p和链表q中的结点值都是整数,且按结点值的递增次序链接起来的带表头结点的环形链表。各链表的表头结点的值为max,且链表中其他结点的值都小于max,在程序中取max为9999。在各个链表中,每个结点的值各不相同,但链表p和链表q可能有值相同的结点(表头结点除外)。下面的程序将链表q合并到链表P中,使得合并后的链表是按结点值递增次序链接起来的带表头结点的环形链表,且链表中各个结点的值各不相同。请在划线处填上适当内容,每个框只填一个语句或一个表达式,链表的结点类型如下TYPEnodeptr=*nodetype;nodetype=RECORDdata:integer;link:nodeptr;END;CONSTmax=9999;PROCEDUREmerge(VARp:nodeptr;q:nodeptr);VARr,s:nodeptr;BEGINr:=p;WHILE(A)DOBEGINWHILEr\link.data 2421.己知双链表中结点的类型定义为:TYPEdpointer="list;list=RECORDdata:integer;left,right:dpointer;END;如下过程将在双链表第i个结点(i>=0)之后插入一个元素为x的结点,请在答案栏给出题目中处应填入的语句或表达式,使之可以实现上述功能。PROCEDUREinsert(VARhead:dpointer;i,x:integer);VARs,p:dpointer;j:integer;BEGINnew(s);s*.data:=x;IF(i=O)THENBEGINs\right:=head;(1)head:=sEND{如果i=0,则将s结点插入到表头后返回}ELSEBEGINp:=head;12);{在双链表中查找第i个结点,由p所指向}WHILE((pONIL)AND(j0)指明环形链表的结点个数,参数i(l<=i〈=n)指明起始结点,参数m(m>0)是步长,指明从起始结点或前次被删除并输出的结点之后的第m个结点作为本次被输出并删除的结点。例如,对于下图中具有6个结点的环形链表,在调用josephus(6,3,2)后,将输出5,1,3,6,4,2请在横线处填上适当内容, 25每空只填一个语句。TYPEnodeptr=~nodetype;nodetype=RECORDdata:intrger;1ink:nodeptrEND;VARn,i,m:integer;FUNCTIONCreate_link_list(n:integer):nodeptr;VARhead,p,q:nodeptr;i:integer;BEGINhead:=NIL;IFn>0THENBEGINnew(head);p:=head;FORi:=lTOn-1DOBEGINp\data:=i;new(q);(A);(B)END;p.data:=n;(C);END;Creat_link_list:=headEND;PROCEDUREjosephus(n,i,m:integer);VARp,q:nodeptr;j:integer;BEGINp:=Creat」ink」ist(n);WHILEi>lDOBEGINp:=p\link;i:=i-lEND;(D);WHILEj 26BEGINWHILEhead<>NILDOBEGINp:=NIL;q:=head;r:=q;s:=q\link;WHILEs<>NILDOBEGINIFs二data 27ext;IFp=lTHEN[new(q);q\key:=x;q.freq:=0]ELSE{找到}[p.freq:=p\freq+1;q:=p;(2);WHILEq.freq>p.pre.freqDOp:=p\pre;IFpOqTHEN[(3)]];IF(4)THEN[q.next:=p,q.pre;=p.pre;p.pre.next:=q;p.pre:=q]return(q);END;【北京工业大学1999五(12分)】28.循环链表a和b的结点值为字母,其中a表非递减有序,下面的程序欲构造一个递增有序的循环链表c,其中结点的值为同时在a,b两链表中出现的字母,且c中字母不重复,请补上程序中空缺的部分,并估计算法的时间复杂度。(设a,b的结点数分别为m,n)TYPElink=node;node二RECORDkey:char;next:linkEND;PROCjj(a,b:link;VARc:link);VARp,q,r,s:1ink;BEGINnew(c);c.next:=c;q:=a;p:=a.next;WHILEpOaDO 28[(1);WHILEp\key=p 29ext*,keyDO[q:=p;p=p 30ext];(跳过相同字母}r:=b.next;(2);WHILEr\keyOp.keyDOr:=r.next;IFrObTHEN[s:=p;q.next:=p 31ext;(3);s 32ext:=c 33ext;c 34ext:=s;c:=s]ELSE[q:=p;p:=p 35ext]];c:=c 36ext;END;算法时间复杂度为0(4)【北京工业大学2000四(15分)】27.以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之。voidreverse(pointerh)/*h为附加头结点指针;类型pointer同算法设计第3题*/{pointerp,q;p=h->next;h->next=NULL;while((1)){q=p;p=p->next;q->next=h->next;h->next=(2);}}【西南交通大学2000一、9]28.下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填入适当的语句。voidreverse(linklist&L){p=null;q=L;while(q!=null){GJ;q->next=p;p=q;(2);}(3);)【北京理工大学2001九、1(6分)】32.下面程序段是逆转单向循环链表的方法,p。是原链表头指针,逆转后链表头指针仍为P0o(可以根据需要增加标识符)p:=po;qo:=NIL;WHILE⑴DOBEGIN(2);(3J;(4);(5)END;p 37ext:=q0;po 38ext:=p;po:=p;【中国人民大学2000二、1(4分)】33.一个无头结点的线性链表(不循环)有两个域。数据域data,指针域next,链首head,下面算法用read(num)读入数据,当num小于。时,输入结束。建立一个数据以递增序组成的链表。PROCinsert(head,x);{在链首为head的表中按递增序插入x}new(r);r人.data:=x;IFhead=NILTHEN[head:^(l);r 39ext:=⑨]ELSEIF13)THEN[r".next:=head;head:=r]ELSE[p:=head;WHILE®_AND(p人,nextWNIL)DO[q:=p;(5)];IF(6)THEN[q'.next:=(7);r人.next:=(8);]ELSE[p人.next:=(9);r八.next:=(10)一:]]ENDP; 40PROCcreat(head);head:=(11);read(num);WHILEnum>0DO[insert(head,num);read(num)]ENDP;【南京理工大学1999三、4(11分】34.一元稀疏多项式以循环单链表按降‘幕排列,结点有三个域,系数域coef,指数域exp和指针域next;现对链表求一阶导数,链表的头指针为ha,头结点的exp域为-1。derivative(ha){q=ha;pa=ha->next;while((1)){if((2)){((3)):free(pa);pa=((4));}else{pa->coef(⑸):pa->exp((6));q=((7));}pa=((8));))【南京理工大学2000三、3(10分】35.下面是删除单链表L中最大元素所在结点的类PASCAL语言算法,请在横线填上内容,完成其功能。TYPEpointer=tnode;node=RECORDdata:integer;next:pointerEND;PROCEDUREdelmax(L:pointer);VARp,q,r:pointer;m:integer;BEGINr:=L;p:=Lt.next;IFpONILTHEN[m:=pt.data;(X);p:=pt.next;WHILEpONILDO[IF(2)THEN[(21;m:=pt.data;](4);p:=pt.next;]q:=rt.next;(5);dispose(q);END;【北京科技大学1998二】36.对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其功能。typedefstructnode{intdata;structnode*next;)linknode,*1ink;voidInsertsort(linkL){linkp,q,r,u;p=L->next;(1);while((2)){r=L;q=L->next;while(⑶&&q->data<=p->data){r=q;q=q->next;}u=p->next;(1);^5);p=u;))【北京科技大学2001二(10分】37.下面是一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B 41中的一个元素时,e才是C中的一个元素。集合用有序链表实现,初始时,A,B集合中的元素按递增排列,C为空;操作完成后A,B保持不变,C中元素按递增排列。下面的函数append(last,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;函数difference(A,B)实现集合运算A-B,并返回表示结果集合C的链表的首结点的地址。在执行A-B运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结点。程序(a)(编者略去这个PASCAL程序)程序(b)typedefstructnode(intelement;structnode*1ink;}N0DE;NODE*A,*B,*C;NODE*append(NODE*last,inte){last->1ink=(NODE*)malloc(sizeof(NODE));last->link->element=e;return(last->link);)NODE*difference(NODE*A,NODE*B){NODE*C,*last;C=last=(NODE*)malloc(sizeof(NODE));while(1)if(A->element 425说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。【厦门大学2000五、1(14%/3分)】6试述头结点,首元结点,头指针这三个概念的区别.【武汉交通科技大学1996二、2(3分)】【西安电子科技大学2001计应用二、1(5分】8.已知有如下定义的静态链表:TYPEcomponent=RECORDdata:elemtp;next:0..maxsizeENDVARstalist:ARRAY[0..maxsize]OFcomponent;以及三个指针:av指向头结点,p指向当前结点,pre指向前驱结点,现要求修改静态链表中next域中的内容,使得该静态链表有双向链表的功能,从当前结点p既能往后查找,也能往前查找:(1)定义next域中的内容。(用老的next域中的值表示);(2)如何得到当前结点p的前驱(pre)的前驱,给出计算式;(3)如何得到p的后继,给出计算式;【中科院计算所2000四(10分)】9.在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?【西安电子科技大学1999计应用一、1(5分】10.如何通过改链的方法,把•个单向链表变成一个与原来链接方向相反的单向链表?【中国人民大学2001二、4(2分)】11.下面是一算法的核心部分,试说明该算法的功能。pre:=Lt.next;{L是一单链表,结点有数据域data和指针域next)IFpreONILTHENWHILEpret.nextONILDOBEGINp:=pret.next;IFpt.data>=pret.dataTHENpre:=pELSEreturn(false)END;return(true);【燕山大学2000七、1(7分】12.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。【北京科技大学2000一、3]13.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在P结点之前插入s结点的操作(PASCAL语句)。【北京科技大学1999一、2(2分】14.有线性表®,az,…,a.),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结点。分别写出下面三种情况的查找语句。要求时间尽量少。(1)线性表中元素无序。(2)线性表中元素按递增有序。(3)线性表中元素按递减有序。【北京邮电大学1994七(7分】15.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。仔细阅读如下的程序,并回答问题:(1)程序的功能。(2)si,s2中值的含义。(3)pa,pb中值的含义。PROCEDUREexam(pa,pb)BEGINpl:=pat.next;p2:=pbt.next;pat.next:=A;si:=0;s2:=0;WHILEpl#八ANDp2W八DO[CASEplt.data 43pat.next:=p;p2:=p2t.next;si:=s1+1;];END1;WHILEpl#八DO[p:=pl;pl:=plt.next;dispose(p);s2:=s2+l]END;【南京航空航天大学1995十(9分】10.写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关语句。结点结构为:(11ink,data,rlink)【北京邮电大学1992三、4(25/4分】P,.,,.*.....卜。||23|斗115rl二|3。|11.按照下列题目中的算法功能说明,将算法描述片段中的错误改正过来。(1)(4分)下面的算法描述片段用于在双链表中删除指针变量p所指的结点:p.rlink-p.llink".rlink;p.llink*-p.,link二llinkdispose(p); 44(1)(6分)下面的算法描述片段用于在双链表中指针变量p所指结点后插入一个新结点:new(q);q*.llink-p;p.rlink-q;q.rlink-p.rlink;q*-p\rlink\llink;【山东大学1999八(10分)】10.已知L是一个数据类型linkedlist的单循环链表,pa和pb是指向L中结点的指针。简述下列程序段的功能。【山东科技大学2001一、2(5分】TYPE1inkedlist=tnode;node二RECORDdata:datatype;next:1inkedlistEND;PROCMp(pa,pb:linkedlist);PROCsubp(s,q:linkedlist);p:=s;WHILEpt.nextOqDOp:=pt.next;pt.next:=sENDP;subp(pa,pb);subp(pb,pa);ENDP;11.设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p所指结点之前插入一s结点的C语言描述语句。【北京科技大学2001一、3(2分】12.本题给出一个子程序的框图,如图2,试填空完善此算法框图。该子程序用来寻找第一个均出现在三个整数单向链表fl,f2,f3中的相同整数。假定在调用该子程序前,这三个整数链表已按从小到大的次序排序,单向链表的形式如下图1的例子所示。图1:datalinkala2an|N!l| 45图2:found-*-false注:在图2的框图中:found和exit均为布尔型的变量,可取值为true和false。val是整型变量,用来存放第一个均出现在fl,f2,f3中的相同整数。若fl,f2和f3中无相同的整数,found的值为false,否则found的值为true,flt.link表示访问fl所指结点的link域。【哈尔滨工业大学1999三(15分】10.一线性表存储在带头结点的双向循环链表中,L为头指针。如下算法:(1)说明该算法的功能。(2)在空缺处填写相应的语句。voidunknown(BNODETP*L)p=L->next;q=p->next;r=q->next;while(q!=L){while(p!=L)&&(p->data>q->data)p=p->prior; 46q->prior->next=r:_(1);q->next=p->next;q->prior=p;(2);^3);q=r;p=q->prior;(4);}}【北京理工大学1999第二部分数据结构[7](8分]五、算法设计题1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。【北京大学1998三、1(5分】类似本题的另外叙述有:(1)设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。【南京理工大学1997四、3(15分】PROCEDUREmerge(ha,hb);(2)已知头指针分别为la和1b的带头结点的单链表中,结点按元素值非递减有序排列。写出将la和1b两链表归并成一个结点按元素值非递减有序排列的单链表(其头指针为1c),并计算算法的时间复杂度。【燕山大学1998五(20分】2.图(编者略)中带头结点且头指针为ha和hb的两线性表A和B分别表示两个集合。两表中的元素皆为递增有序。请写一算法求A和B的并集AUB。要求该并集中的元素仍保持递增有序。且要利用A和B的原有结点空间。【北京邮电大学1992二(15分】类似本题的另外叙述有:(1)已知递增有序的两个单链表A,B分别存储了一个集合。设计算法实现求两个集合的并集的运算A:=AUB【合肥工业大学1999五、1(8分】(2)已知两个链表A和B分别表示两个集合,其元素递增排列。编一函数,求A与B的交集,并存放于A链表中。【南京航空航天大学2001六(10分】(3)设有两个从小到大排序的带头结点的有序链表。试编写求这两个链表交运算的算法(即LinL2)«要求结果链表仍是从小到大排序,但无重复元素。【南京航空航天大学1996十一(10分】(4)己知两个线性表A,B均以带头结点的单链表作存储结构,且表中元素按值递增有序排列。设计算法求出A与B的交集C,要求C另开辟存储空间,要求C同样以元素值的递增序的单链表形式存贮。【西北大学2000五(8分)】(5)已知递增有序的单链表A,B和C分别存储了一个集合,设计算法实现A:=AU(BAO,并使求解结构A仍保持递增。要求算法的时间复杂度为0(|A|+1B|+1C|)。其中,|A|为集合A的元素个数。【合肥工业大学2000五、1(8分】3.知LI、L2分别为两循环单链表的头结点指针,m,n分别为Ll、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。【东北大学1996二(12分)】类似本题的另外叙述有:(1)试用类Pascal语言编写过程PROCjoin(VARla:link;lb:link)实现连接线性表la和lb(lb在后)的算法,要求其时间复杂度为0(1),占用辅助空间尽量小。描述所用结构。【北京工业大学1997—、1(8分)】(2)设有两个链表,ha为单向链表,hb 47为单向循环链表。编写算法,将两个链表合并成一个单向链表,要求算法所需时间与链表长度无关。【南京航空航天大学1997四(8分】4.顺序结构线性表LA与LB的结点关键字为整数。LA与LB的元素按非递减有序,线性表空间足够大。试用类PASCAL语言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。高效指最大限度的避免移动元素。【北京工业大学1997一、2(12分)】5.已知不带头结点的线性链表list,链表中结点构造为(data、link),期data为数据域,link为指针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该链表以外的任何链结点空间。【北京航空航天大学1998五(15分】6.设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。【东北大学1996六(14分)】类似本题的另外叙述有:(1)设一单向链表的头指针为head,链表的记录中包含着整数类型的key域,试设计算法,将此链表的记录按照key递增的次序进行就地排序.【中科院计算所1999五、1(10分)】7.设Listhead为一单链表的头指针,单链表的每个结点由一个整数域DATA和指针域NEXT组成,整数在单链表中是无序的。编一PASCAL过程,将Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。程序中不得使用NEW过程申请空间。【山东大学1993六(15分)】类似本题的另外叙述有:(1)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。【北京理工大学2000四、2(4分)】(2)设L为一单链表的头指针,单链表的每个结点由一个整数域data和指针域NEXT组成,整数在单链表中是无序的。设计算法,将链表中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列,算法中不得申请新的结点空间。【青岛海洋大学1999三(12分】(3)将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。1)写出其类型定义:2)写出算法。【山东大学1998九(9分)】【山东工业大学2000九(9分】8.已知线性表(ala2a3-an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:例:(x,-x,-x,x,x,-x…x)变为(-X,-X,-X…X,X,x)o【东北大学1998二(15分)】类似本题的另外叙述有:(1)设有一元素为整数的线性表L=(ai,a〃a3,…,须),存放在一维数组A[N]中,设计一个算法,以表中a“作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于a”右半部分每个元素都大于a”a。位于分界位置上(要求结果仍存放在A[N]中)。【北京理工大学1999八(6分】(2)顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成B和C两个表,使A中元素值大于等于0的元素放入B,小于0的放入C中..要求:1)表B和C另外设置存储空间;2)表B和C不另外设置,而利用A的空间.【山东大学2001九、1(12分)】(3)知线性表(al,a2,a3,…,an)按顺序存储,且每个元素都是整数均不相同,设计把所有奇数移到所有偶数前边的算法。(要求时间最少,辅助空间最少)【东北大学1997三(15分)】(4)编写函数将一整数序列中所有负数移到所有正数之前,要求时间复杂度为0(n)【南京航空航天大学2001八(10分】 48(5)已知一个由n(设n=1000)个整数组成的线性表,试设计该线性表的一种存储结构,并用标准pascal语言描述算法,实现将n个元素中所有大于等于19的整数放在所有小于19的整数之后。要求算法的时间复杂度为0(n),空间复杂度0(1).【西安交通大学1996六(11分)】8.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。voiddelete(Linklist&L)【北京理工大学2001九、3(8分)】9.已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点。【北京航空航天大学2001四(10分)】10.已知p指向双向循环链表中的一个结点,其结点结构为data、llink、rlink三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。【首都经贸大学1997二、2(15分】11.线性表(ai,a2,a3,…,a)中元素递增有序且按顺序存储于计算机内。要求设计一算法完成:(1)用最少时间在表中查找数值为x的元素。(2)若找到将其与后继元素位置相交换。(3)若找不到将其插入表中并使表中元素仍递增有序。【东北大学1996三(12分)】13.设单链表的表头指针为h,结点结构由data和next两个域构成,其中data域为字符型。写出算法dc(h,n),判断该链表的前n个字符是否中心对称。例如xyx,xyyx都是中心对称。【首都经贸大学1998三、9(15分】14.已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前。【中国矿业大学2000三(10分】类似本题的另外叙述有:(1)hl,h2为两个链表的表头指针,结点结构为data和link两个域组成。写出算法inde(hl,h2,i,j,1),将链表hl从第i个结点起的1个结点删除,并插入到h2表的第j个结点之前。【首都经贸大学1998三、10(20分】15.设线性表存于A[l..size]的前num各分量中,且递增有序。请设计一个算法,将x插入到线性表的适当位置上,以保持线性表的有序性,并在设计前说明设计思想,最后说明所设计算法的时间复杂度。【西安电子科技大学1999计应用1997二(10分】类似本题的另外叙述有:(1)试编制在线性表1={12,13,21,24,28,30,42,}中插入数据元素26的程序。(要求该程序用turboPascal语言编制并能在计算机上运行,结点类型为链式结构)【大连海事大学1996二、1(16分)】16.假设一个单循环链表,其结点含有三个域pre、data,link.其中data为数据域;pre为指针域,它的值为空指针(NIL);link为指针域,它指向后继结点。请设计算法,将此表改成双向循环链表。【西安电子科技大学1999软件五(10分】17.已知递增有序的单链表A,B分别存储了•个集合,请设计算法以求出两个集合A和B的差集A-B(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。【西安电子科技大学2000计应用1997二(10分】18.已知一个单链表中每个结点存放一个整数,并且结点数不少于2,请设计算法以判断该链表中第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回ture,否则返回false. 49【西安电子科技大学2000软件1997二(10分】14.两个整数序列A=al,a2,a3,am和B=bl,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。【东北大学1999二(10分)】15.L1与L2分别为两单链表头结点地址指针,且两表中数据结点的数据域均为一个字母。设计把L1中与L2中数据相同的连续结点顺序完全倒置的算法。【东北大学1997四(15分)】1643TTc|b[dIaIT-*1dIaI『刃b|-HdIaI类似本题的另外叙述有:(1)知L为链表的头结点地址,表中共有m(m>3)个结点,从表中第i个结点起到第m个结点构成一个循环部分链表,设计将这部分循环链表中所有结点顺序完全倒置的算法。【东北大学1998三(15分)】17.请写一个算法将顺序存储结构的线性表(a、..a。)逆置为(a....a)。【大连海事大学1996八(6分)】类似本题的另外叙述有:(1)设有一带头结点的单链表,编程将链表颠倒过来.要求不用另外的数组或结点完成.【南京航空航天大学1999八(10分】(2)设有一个带头结点的单向链表,数据项递减有序。写一算法,重新排列链表,使数据项递增有序,要求算法时间复杂度为0(n)。(注:用程序实现)【南京航空航天大学1997七(12分】(3)试编写求倒排循环链表元素的算法。【南京航空航天大学1995十二(10分】(4)请设计算法将不带头结点的单链表就地逆置。【北方交通大学2001三(12分】(5)试编写算法,将不设表头结点的、不循环的单向链表就地逆转。【北方交通大学1997五(10分】(6)有一个单链表L(至少有1个结点),其头结点指针为head,编写一个过程将L逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。【燕山大学2001四、2(8分】18.设有一个由正整数组成的无序(向后)单链表,编写完成下列功能的算法:(1)找出最小值结点,且打印该数值;(2)若该数值是奇数,则将其与直接后继结点的数值交换;(3)若该数值是偶数,则将其直接后继结点删除。【东北大学2000-(15分)】23.已知L为没有头结点的的单链表中第一个结点的指针,每个结点数据域存放一个字符,该字符可能是英文字母字符或数字字符或其它字符,编写算法构造三个以带头结点的单循环链表表示的线性表,使每个表中只含同一类字符。(要求用最少的时间和最少的空间)【东北大学2002三(15分)】19.在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如:(7,10,10,21,30,42,42,42,51,70)将变作(7,10,21,30,42,51,70),分析算法的时间复杂度。【北京工业大学1996三(15分)】20.在输入数据无序的情况下,建立一个数据值为整型的递增有序的顺序存储线性表L,且要求当输入相同数据值时,线性表中不能存在数据值相同的数据元素,试写出其算法。顺序存储结构的线性表描述为:CONSTmaxlen={线性表可能达到的最大长度}; 50TYPEsqlisttp=RECORDelem:array[1..maxlen]ofinteger;last:0..maxlenEND;VARL:sqlisttp;【同济大学1998二(12分)】14.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4)中比10大的数有5个;(2)在单链表将比正整数x小的数按递减次序排列;(3)将正整数(比)x大的偶数从单链表中删除。【东北大学2001二(17分)】15.编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。【吉林大学2001二、1(7分)】类似本题的另外叙述有:(1)已知非空线性链表第一个结点由List指出,请写一算法,交换p所指的结点与其下一个结点在链表中的位置(设p指向的不是链表最后那个结点)。【北京航空航天大学1999五(10分】(2)已知任意单链表如图所示(编者略去图)。Head为表头指针,指向表的第一个元素,p为指向表中任意结点的指针,试设计一个算法,将p指向的结点和其后面结点交换位置(可采用任何高级语言描述算法).【山东大学1992二(12分)】16.设键盘输入n个英语单词,输入格式为n,wi,…,w”其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:(10分)(1)如果单词重复出现,则只在链表上保留一个。(单考生做)。(2)除满足(1)的要求外。链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n)个单词(统考生做)。【南京航空航天大学1998九(10分】17.已知一双向循还链表,从第二个结点至表尾递增有序,(设a 51【北方交通大学2000六(17分】14.设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pred(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被起用前,其值均初始化为零。每当在链表中进行一次Located,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Located,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。【清华大学1997二(10分】15.给定(己生成)一个带表头结点的单链表,设head为头指针,结点的结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。(要求;不允许使用数组作辅助空间)【华中理工大学2000八、2(13分】16.已知三个带头结点的线性链表A、B和C中的结点均依元素值自小至大非递减排列(可能存在两个以上值相同的结点),编写算法对A表进行如下操作:使操作后的链表A中仅留下三个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用结点。限定算法的时间复杂度为0(m+n+p),其।m、n和p分别为三个表的长度。【清华大学1995—(15分】第3章栈和队列-选择题1.对于栈操作数据的原则是()。【青岛大学2001五、2(2分】A.先进先出B.后进先出C.后进后出D.不分顺序2.在作进栈运算时,应先判别栈是否(①),在作退栈运算时应先判别栈是否(②).当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③).为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的(④)分别设在这片内存空间的两端,这样,当(⑤)时,才产生上溢。①,②:A.空B.满C.上溢D.下溢(3):A.n-lB.nC.n+1D.n/2®:A.长度B.深度C.栈顶D.栈底⑤:A.两个栈的栈顶同时到达栈空间的中心点.B.其中一个栈的栈顶到达栈空间的中心点.C.两个栈的栈顶在栈空间的某一位置相遇.D.两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.【上海海运学院1997二、1(5分)】【上海海运学院1999二、1(5分】3.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(l<=i〈=n)个元素是()oA.不确定B.n-i+1C.iD.n-i【中山大学1999一、9(1分)】4.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。A.i-j-1B.i-jC.j-i+1D.不确定的【武汉大学2000二、3]5.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为pi,pz,P3,…,Pn,若Pn是n,则Pi是()。A.iB.n-iC.n-i+1D.不确定【南京理工大学2001一、1(1.5分】6.有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?()A.543612B.453126C.346521D.234156 52【北方交通大学2001一、3(2分】3.设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。【中科院计算所2000—、10(2分)】A.1,2,4,3,B.2,1,3,4,C.1,4,3,2,D.4,3,1,2,E.3,2,1,4,8.一个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是().A.23415B.54132C.23145D.15432【南开大学2000一、1】【山东大学2001二、4(1分)】【北京理工大学2000一、2(2分】9.设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是().A.51234B.45132C.43125D.32154【合肥工业大学2001一、1(2分】10.某堆栈的输入序列为a,b,c,d,下面的四个序列中,不可能是它的输出序列的是)oA.a,c,b,dB.b,c,d,aC.c,d,b,aD.d,c,a,b【北京航空航天大学2000一、3(2分)】【北京邮电大学1999一、3(2分】11.设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为(A.fedcbaB.bcafedC.dcefbaD.cabdef【南京理工大学1996一、9(2分】12.设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是()。A.XYZB.YZXC.ZXYD.ZYX【南京理工大学1997一、5(2分】13.输入序列为ABC,可以变为CBA时,经过的栈操作为()【中山大学1999一、8(1分)】A.push,pop,push,pop,push,popB.push,push,push,pop,pop,popC.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop14.若一个栈以向量V[l..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是(A.top:=top+l;V[top]:=xB.V[top]:=x;top:=top+lC.top:=top-l;V[top]:=xD.V[top]:=x;top:=top-l【南京理工大学1998一、13(2分】15.若栈采用顺序存储方式存储,现两栈共享空间top[i]代表第i个栈(i=l,2)栈顶,栈1的底在v[l],栈2的底在V[m],则栈满的条件是()»A.|top[2]-top[l]|=0B.top[l]+l=top[2]C.top[l]+top[2]=mD.top[l]=top[2]【南京理工大学1999一、14(1分】16.栈在()中应用。【中山大学1998二、3(2分】A.递归调用B.子程序调用C.表达式求值D.A,B,C17.一个递归算法必须包括()。【武汉大学2000二、2]A.递归部分B.终止条件和递归部分C.迭代部分D.终止条件和迭代部分18.执行完下列语句段后,i值为:()【浙江大学2000一、6(3分)】intf(intx){return((x>0)?x*f(x-l):2);}inti;i=f(f(D);A.2B.4C.8D.无限递归19.表达式a*(b+c)-d的后缀表达式是()。【南京理工大学2001一、2(1.5分】A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd20.表达式3*2~(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中一为乘雷。A.3,2,4,1,1:(*-(+*-B.3,2,8;(**-C.3,2,4,2,2;(*-(-D.3,2,8;(*'(-【青岛大学2000五、5(2分】 5320.设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈【西安电子科技大学1996一、6(2分】21.用链接方式存储的队列,在进行删除运算时()。【北方交通大学2001一、12(2分】A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改22.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时()。【北京理工大学2001六、3(2分)】A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改23.递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。A.队列B.多维数组C.栈D.线性表【福州大学1998一、1(2分】24.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为()。【北京工商大学2001一、2(3分】A.(rear-front+m)%mB.rear-front+1C.(front-rear+m)%mD.(rear-front)%m26.循环队列A[0..mT]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。【南京理工大学2001—、5(1.5分】A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.rear-front27.循环队列存储在数组A[0..m]中,则入队时的操作为()。【中山大学1999一、6(1分】A.rear=rear+lB.rear=(rear+l)mod(m-1)C.rear-(rear+l)modmD.rear-(rear+1)mod(m+1)28.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为。和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?()【浙江大学1999四、1(4分)】A.1和5B.2和4C.4和2D.5和129.已知输入序列为abed经过输出受限的双向队列后能得到的输出序列有(A.dacbB.cadbC.dbeaD.bdacE.以上答案都不对【西安交通大学1996三、3(3分)】30.若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是()。【西安电子科技大学1996一、5(2分】A.1234B.4132C.4231D.421331.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。A.(rear+1)MODn=frontB.rear=frontC.rear+l=frontD.(rear-1)MODn=front【南京理工大学1999一、16(2分】32.栈和队列的共同点是()。【燕山大学2001一、1(2分】A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点 5428.栈的特点是(①),队列的特点是(②),栈和队列都是(③)。若进栈序列为1,2,3,4则(④)不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4则(⑤)是一个出队列序列。【北方交通大学1999一、1(5分)】①,②:A.先进先出B.后进先出C.进优于出D.出优于进③:A.顺序存储的线性结构B.链式存储的线性结构C.限制存取点的线性结构D.限制存取点的非线性结构④,⑤:A.3,2,1,4B.3,2,4,1C.4,2,3,1D.4,3,2,1F.1,2,3,4G.1,3,2,429.栈和队都是()【南京理工大学1997一、3(2分】A.顺序存储的线性结构B.链式存储的非线性结构C.限制存取点的线性结构D.限制存取点的非线性结构30.设栈S和队列Q的初始状态为空,元素el,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,el则栈S的容量至少应该是()«A.6B.4C.3D.2【南京理工大学2000一、6(1.5分】31.用单链表表示的链式队列的队头在链表的()位置。【清华大学199811(2分】A.链头B.链尾C.链中32.依次读入数据元素序列{a,b,c,d,e,f,g}进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下哪些序列?【哈尔滨工业大学2000七(8分】A.{d,e.c,f,b,g,a}B.{f,e,g,d,a>c,b}C.{e,f,d»g,b.c,a}D.{c,d.b.e.f,a,g)二判断题1.消除递归不一定需要使用栈,此说法()【中科院计算所1998二、2(2分)】【中国科技大学1998二、2(2分】2.栈是实现过程和函数等子程序所必需的结构。()【合肥工业大学2000二、2(1分】3.两个栈共用静态存储空间,对头使用也存在空间溢出问题。()【青岛大学2000四、2(1分】4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。()【上海海运学院1998一、4(1分】5.即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。()【北京邮电大学1999二、4(2分】6.有n个数顺序(依次)进栈,出栈序列有Cn种,Cn=[l/(n+1)]*(2n)!/[(n!)*(n!)]„()【北京邮电大学1998一、3(2分】7.栈与队列是一种特殊操作的线性表。()【青岛大学2001四、3(1分】8.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1.()【上海海运学院1995一、2(1分)1997一、3(1分】9.栈和队列都是限制存取点的线性结构。()【中科院软件所1999六、(5)(2分]10.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列1,5,4,6,2,3.()【上海海运学院1999一、3(1分】11.任何一个递归过程都可以转换成非递归过程。()【上海交通大学1998一、3(1分】12.只有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈。() 55【上海交通大学1998一、4(1分】4.队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。()【上海海运学院1998一、3(1分】5.通常使用队列来处理函数或过程的调用。()【南京航空航天大学1997一、5(1分】6.队列逻辑上是一个下端和上端既能增加又能减少的线性表。()【上海交通大学1998一、2]7.循环队列通常用指针来实现队列的头尾相接。()【南京航空航天大学1996六、1(1分】8.循环队列也存在空间溢出问题。()【青岛大学2002一、2(1分】9.队列和栈都是运算受限的线性表,只允许在表的两端进行运算。()【长沙铁道学院1997一、5(1分)】10.栈和队列都是线性表,只是在插入和删除时受到了一些限制。()【北京邮电大学2002一、3(1分)]11.栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。()【上海海运学院1996一、2(1分)1999一、2(1分】三填空题1.栈是的线性表,其运算遵循的原则。【北京科技大学1997一、3]2.是限定仅在表尾进行插入或删除操作的线性表。【燕山大学1998一、3(1分】3.一个栈的输入序列是:1,2,3则不可能的栈输出序列是o1中国人民大学2001一、1(2分)】4.设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是,而栈顶指针值是H。设栈为顺序栈,每个元素占4个字节。【西安电子科技大学1998二、1(4分】5.当两个栈共享•存储区时,栈利用一维数组stack(l,n)表示,两栈顶指针为top[l]与top[2],则当栈1空时,top[l]为,栈2空时,top[2]为,栈满时为,【南京理工大学1997三、1(3分】6.两个栈共享空间时栈满的条件。【中山大学1998一、3(1分】7.在作进栈运算时应先判别栈是否(1):在作退栈运算时应先判别栈是否(2):当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(3)。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的空间时,应将两栈的(4)分别设在内存空间的两端,这样只有当(5)时才产生溢出。【山东工业大学1994一、1(5分】8.多个栈共存时,最好用作为存储结构。【南京理工大学2001二、7(2分】9.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为。【西南交通大学2000一、5]10.顺序栈用data[l..n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是。【合肥工业大学2001三、2(2分】11.表达式23+((12*3-2)/4+34*5/7)+108/9的后缀表达式是。【中山大学1998一、4(1分】12.循环队列的引入,目的是为了克服.【厦门大学2001—、1(14/8分)】13.用下标0开始的N元数组实现循环队列时,为实现下标变量M加1后在数组有效下标范围内循环,可采用的表达式是:M:=(填PASCAL语言,C语言的考生不填);M=(填C语言,PASCAL语言的考生不填)。【西南交通大学2000一、7] 5612.又称作先进先出表。【重庆大学2000一、7]13.队列的特点是。【北京理工大学2000二、2(2分】14.队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是。【北方交通大学2001二、5]15.已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是.【合肥工业大学2000三、3(2分】16.区分循环队列的满与空,只有两种方法,它们是和。【北京邮电大学2001二、2(4分】17.设循环队列用数组表示,队首、队尾指针分别是FRONT和TAIL,判定队满的条件为o【山东工业大学1995一、1(1分】18.设循环队列存放在向量sq.data[0:M]中,则队头指针sq.front在循环意义下的出队操作可表示为,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为«【长沙铁道学院1997二、4(4分)】19.表达式求值是应用的一个典型例子。【重庆大学2000一、10]20.循环队列用数组A[0..mT]存放其元素值,已知其头尾指针分别是front和rear,则当前队列的元素个数是.【厦门大学2000六、1(16%/3分)】21.设Q[0..NT]为循环队列,其头、尾指针分别为P和R,则队Q中当前所含元素个数为【北京科技大学1997一、4]22.完善下面算法。【中山大学1998四、2(6分】后缀表达式求值,表达式13/25+61的后缀表达式格式为:13,25/61,+FUNCcompute(a):real;后缀表达式存储在数组a[1..m]中。BEGINsetnull(s);i:=1;ch:=(1);WHILEch<>'DOBEGINCASEchOF'O'..'9':x:=0;WHILEch<>','DOBEGINx:=x*10+ord(ch)-ord('O');i:=i+l;ch:=(2):END'+':x:-pop(s)+pop(s);,:x:=pop(s);x:=pop(s)-x;,*':x:=pop(s)*pop(s);,/':x:=pop(s);x:=pop(s)/x;ENDCASEpush(s,x);i:=i+l;ch:=a[i];END;comput:=⑶;END;23.算术表达式求值的流程,其中OPTR为算术符栈,OPND为操作数栈,precede(operl,oper2)是比较运算符优先级别的函数,operate(opndl,oper,opnd2)为两操作数的运算结果函数。(#表示运算起始和终止符号)【西北工业大学1999六、2(7分)】FUNCTIONexpreduced:operandtype; 57INITSTACK(OPTR);PUSH(OPTR"S");INITSTACK(OPND);read(w);WHILEN0T((w='#')AND(GETTOP(OPTR)='#'))DOIFNOTwinopTHENPUSH(OPND,w);ELSECASEprecede(GETTOP(OPTR),w)OF'<':[(1);read(w);]'=':[②;read(w);];':[theta:-POP(OPTR);b:=POP(OPND):a:=POP(OPND);13):]ENDC;RETURN(GETTOP(OPND));ENDF;12.根据需要,用适当的语句填入下面算法的中:问题:设有n件物品,重量分别为wi,wz,w3,…,w”和一个能装载总重量为T的背包。能否从n件物品中选择若干件恰好使它们的重量之和等于T。若能,则背包问题有解,否则无解。解此问题的算法如下:FUNCTIONkanpstack(VARstack,w:ARRAY[l..n]OFreal;VARtop:integer;T:real):boo1ean;{w[l:n]存放n件物品的重量,依次从中取出物品放入背包中,检查背包重量,若不超过T,则装入,否则弃之,取下一个物品试之。若有解则返回函数值true,否则返回false)BEGINtop:=0;i:=l;{i指示待选物品}WHILEUIAND②DO[IF(3)ORX41AND(i 58运用栈操作,能否得到出栈序列B、C、A、E、D和D、B、A、C、E?为什么?【北京科技大学1998一、2]8.设输入序列为a,b,c,d,试写出借助•个栈可得到的两个输出序列和两个不能得到的输出序列。【北京科技大学2001一、4(2分】9.设输入序列为2,3,4,5,6,利用一个栈能得到序列2,5,3,4,6吗?栈可以用单链表实现吗?【山东师范大学1996五、4(2分】10.试证明:若借助栈由输入序列1,2,n得到输出序列为P„P2,P„(它是输入序列的一个排列),则在输出序列中不可能出现这样的情形:存在着使PKPKP,。【上海交通大学1998二(15分】11.设一数列的输入顺序为123456,若采用堆栈结构,并以A和D分别表示入栈和出栈操作,试问通过入出栈操作的合法序列。(1)能否得到输出顺序为325641的序列。(5分)(2)能否得到输出顺序为154623的序列。(5分)【北方交通大学1995—(10分】12.(1)什么是递归程序?(2)递归程序的优、缺点是什么?(3)递归程序在执行时,应借助于什么来完成?(4)递归程序的入口语句、出口语句一般用什么语句实现?【大连海事大学1996二、4(4分)】13.设有下列递归算法:FUNCTIONvol(n:integer):integer;VARx:integer:BEGINIFn=0THENvol:=0ELSEBEGINread(x);vol:=vol(n-1)+x;END;END;如该函数被调用时,参数n值为4,读入的x值依次为5,3,4,2,函数调用结束时返回值vol为多少?用图示描述函数执行过程中,递归工作栈的变化过程。【北京工业大学1998四(10分)】14.当过程P递归调用自身时,过程P内部定义的局部变量在P的2次调用期间是否占用同一数据区?为什么?【山东师范大学1999一、4(4分】15.试推导出当总盘数为n的Hanoi塔的移动次数。【北京邮电大学2001四、3(5分】16.对下面过程写出调用P(3)的运行结果。PROCEDUREp(w:integer);BEGINIFw>0THENBEGINp(w-l);writeln(w);{输出W}p(w-1)END;END;【西北大学2001三、7]17.用一个数组S(设大小为MAX)作为两个堆栈的共享空间。请说明共享方法,栈满/栈空的判断条件,并用C或PASCAL设计公用的入栈操作push(i,x),如i为0或1,用于表示栈号,x为入栈值。【浙江大学1998五、2(7分)】18.简述下列程序段的功能。PROCalgo(VARS:stack;k:integer);VART:stack;temp:integer;WHILENOTempty(S)DO[temp:=P0P(S);IFtempOkTHENPUSH(T,temp)];WHILENOTempty(T)DO[temp:=POP(T);PUSH(S,temp)];【山东科技大学2002一、1(4分】 5917.用栈实现将中缀表达式8-(3+5)*(5-6/2)转换成后缀表达式,画出栈的变化过程图。【南京航空航天大学2001五(10分】18.在表达式中,有的运算符要求从右到左计算,如A**B**C的计算次序应为(A**(B**C)),这在由中缀生成后缀的算法中是怎样实现的?(以**为例说明)【东南大学1993—、2(6分)1997—,1(8分)】19.有递归算法如下:FUNCTIONsum(n:integer):intger;BEGINIFn=0THENsum:=0ELSEBEGINread(x);sum:=sum(n-l)+xEND;END;设初值n=4,读入x=4,9,6,2问:(1)若x为局部变量时;该函数递归结束后返回调用程序的sum=?并画出在递归过程中栈状态的变化过程;(2)若x为全程变量递归结束时返回调用程序的sum=?【北京邮电大学1997一(10分】20.画出对算术表达式A-B*C/D-EtF求值时操作数栈和运算符栈的变化过程。【东南大学2000—、3(6分】21.计算算术表达式的值时,可用两个栈作辅助工具。对于给出的一个表达式,从左向右扫描它的字符,并将操作数放入栈S1中,运算符放入栈S2中,但每次扫描到运算符时,要把它同S2的栈顶运算符进行优先级比较,当扫描到的运算符的优先级不高于栈顶运算符的优先级时,取出栈S1的栈顶和次栈顶的两个元素,以及栈S2的栈顶运算符进行运算将结果放入栈S1中(得到的结果依次用n、T2等表示)。为方便比较,假设栈S2的初始栈顶为®(®运算符的优先级低于加、减、乘、除中任何一种运算)。现假设要计算表达式:A-B*C/D+E/F„写出栈S1和S2的变化过程。【山东科技大学2001一、4(7分】22.有字符串次序为3*-y-a/y-2,利用栈,给出将次序改为3y-*ay27-的操作步骤。(可用X代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的出栈操作。例如,ABC变为BCA的操作步骤为XXSXSS)【东北大学2001一、4(4分)】23.内存中一片连续空间(不妨假设地址从1到m)提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任•个栈,仅当这部分空间全满时才发生上溢。【东北大学2000一、1(3分)】24.将两个栈存入数组应如何安排最好?这时栈空、栈满的条件是什么?【东南大学1998一、5]25.在一个算法中需要建立多个堆板时可以选用下列三种方案之一,试问:这三种方案之间相比较各有什么优缺点?(1)分别用多个顺序存储空间建立多个独立的堆栈;(2)多个堆栈共享一个顺序存储空间;(3)分别建立多个独立的链接堆栈。【北京航空航天大学1998一、6(4分】26.在某程序中,有两个栈共享一个一维数组空间SPACE[N]、SPACE[0],SPACE[N-1]分别是两个栈的栈底。(1)对栈1、栈2,试分别写出(元素x)入栈的主要语句和出栈的主要语句。(2)对栈1、栈2,试分别写出栈满、栈空的条件。【北京理工大学1999二、2(8分】29.简述顺序存储队列的假溢出的避免方法及队列满和空的条件。【山东大学2000一、2(4分)】30.举例说明顺序队的“假溢出”现象,并给出解决方案。【福州大学1998三、5(6分)】31.怎样判定循环队列的空和满?【燕山大学1999二、3(4分】32.简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指针与队尾指针的值。【南京航空航天大学1995七(5分】33.利用两个栈sl,s2模拟一个队列时,如何用栈的运算实现队列的插入, 60删除以及判队空运算。请简述这些运算的算法思想。【北京邮电大学1992一、1】【东南大学1999一、1(7分】32.一个循环队列的数据结构描述如下:TYPEsequeuetp=RECORDelem;ARRAY[1..MAXSIZE]OFelemtp;front,rear:0..MAXSIZE;END;给出循环队列的队空和队满的判断条件,并且分析一下该条件对队列实际存储空间大小的影响,如果为了不损失存储空间,你如何改进循环队列的队空和队满的判断条件?【西北工业大学1999三(8分)】33.如果用一个循环数组q[0..mT]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,而改置计数器count用以记录队列中结点的个数。(1)编写实现队列的三个基本运算:判空、入队、出队(3分)(2)队列中能容纳元素的最多个数是多少?(1分)【东北大学2002一、1】34.给出循环队列中元素个数的计算式(设队最大长度为N,队首指针FRONT,队尾指针REAR)【西北大学2000二、7(5分)】35.顺序队列一般应该组织成为环状队列的形式,而且一般队列头或尾其中之一应该特殊处理。例如,队列为listarray[0..n-1],队列头指针为front,队列尾指针为rear,则listarray[rear]表示下一个可以插入队列的位置。请解释其原因。【北京大学1999一、3(20/3分]36.设一个双端队列,元素进入该队列的次序为a,b,c,d»求既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列。【中山大学1999一、4(3分】39.若以1、2、3、4作为双端队列的输入序列,试分别求出以下条件的输出序列:(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列;(2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列;(3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。【山东科技大学2001一、3(6分】40.假设以数组sq[0..7]存放循环队列元素,变量f指向队头元素的前一位置,变量r指向队尾元素,如用A和D分别表示入队和出队操作,请给出:(1)队空的初始条件;(2)执行操作序列A'DAtA'D%'时的状态,并作必要的说明。【北方交通大学1993四(12分】41、设输入元素为1、2、3、P和A,输入次序为123PA,如图(编者略)。元素经过栈后达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名。【中山大学1997]五算法设计题1.设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[o..maxsize-l],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计"Sz有关入栈和出栈的操作算法。【哈尔滨工业大学2001七(12分】2.设从键盘输入一整数的序列:a„a2,a“…,a”试编写算法实现:用栈结构存储输入的整数,当时,将a,进栈:当a,=T时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。【南京航空航天大学1998六(10分】3.设表达式以字符形式已存入数组E[n]中为表达式的结束符,试写出判断表达式中括号(‘('和')')是否配对的C语言描述算法:EXYX(E);(注:算法中可调用栈操作的基本算法。)【北京科技大学2001九、1(10分】 611.从键盘上输入一个逆波兰表达式,用伪码写出其求值程序。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:23434+2*$【山东师范大学1999七(10分】2.假设以I和0分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和0组成的序列,称可以操作的序列为合法序列,否则称为非法序列。(1)下面所示的序列中哪些是合法的?A.I0II0I00B.I00I0II0C.III0I0I0D.III00I00(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。【武汉大学2000五、2]3.设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。【南京邮电大学2000五】4.请利用两个栈S1和S2来模拟一个队列。己知栈的三个运算定义如下:PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给变量x;Sempty(ST):判ST栈是否为空。那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列;dequeue:删除一个元素出队列;queujempty:判队列为空。(请写明算法的思想及必要的注释)【西安电子科技大学2001软件五(10分)I上海交通大学1999~(12分)X河海大学1998三(12分)】类似本题的另外叙述有:(1)有两个长度相同的栈S1,S2,已知以下入栈、出栈、判栈满和判栈空操作:PROCEDUREpush(Stack:Stacktype;x:Datatype);FUNCTIONPop(Stack:Stacktype):Datatype;FUNCTIONFull(Stack:Stacktype):Boolean;FUNCTIONEmpty(Stack:Stacktype)Boo1ean;现用此二栈构成一个队列,试写出下面入队列、出队列操作算法:PROCEDUREEnQueue(x:Datatype);FUNCTIONDeQueue:Datatype;【北京邮电大学2000六(10分】5.设结点结构为(data,link),试用一个全局指针p和某种链接结构实现一个队列,画出示意图,并给出入队addq和出队deleteq过程,要求它们的时间复杂性都是0(1)(不计new和dispose时间)【东南大学1996二(10分】6.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,如图所示(编者略),请写出相应的入队列和出队列算法。【西安电子科技大学1999计应用六(10分】7.如果允许在循环队列的两端都可以进行插入和删除操作。要求:(1)写出循环队列的类型定义:(2)写出“从队尾删除”和“从队头插入”的算法。【北方交通大学1994三(12分】11.在一个循环链队中只有尾指针(记为rear,结点结构为数据域data,指针域next),请给出这种队列的入队和出队操作的实现过程。【山东科技大学2002一、2(6分】12.双端队列(duque)是一个可以在任一端进行插入和删除的线性表。现采用一个一维数组作为双端队列的数据存储结构,使用类PASCAL语言描述如下:CONSTmaxsize=32;{数组中可容纳的元素个数}TYPEduque=RECORDelem:ARRAY[0..MAXSIZE-1]OFdatatype;{环形队列的存放数组}endl,end2:0..MAXSIZE;{环形数组的两端}END;试编写两个算法add(Qu:duque;x:datatype;tag:O..1)和delete(Qu:duque;varx:datatype;tag:0..1) 62用以在此双端队列的任一端进行插入和删除。当tag=0时在左端endl端操作,当tag=l时在右端end2端操作。【清华大学1998二(10分】13.一个双端队列deque是限定在两端endl,end2都可进行插入和删除的线性表。队空条 63件是endl=end2。若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出在指定端i(i=l,2)的插入enq和删除deq操作的实现。(1)当队满时,最多只能有一个元素空间可以是空的。(2)在做两端的插入和删除时,队列中其它元素一律不动。【清华大学1999六(12分】13.已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,使用Pascal或C语言编写一个算法,将队列Q中的所有元素逆置。栈的ADT函数有:makeEmpty(s:stack);push(s:stack;value:datatype);pop(s:stack):datatype;isEmpty(s:stack):Boolean;队列的ADT函数有:enqueue(q:queue:value:datatype);deQueue(q:queue):datatype;isEmpty(q:queue):boolean;15.将n个队列顺序映射到数组v[L.ml置空栈新元素value进栈出栈,返回栈顶值判栈空否元素value进队出队列,返回队头值判队列空否【清华大学2000六(12分)】,每一队列在v中表示为一循环队列。试画出其示意图并写出对应这种表示的addq和deleteq过程。【东南大学1993二(20分】16.设整数序列a“生,…,a”,给出求解最大值的递归程序。【南京航空航天大学2000六】17.线性表中元素存放在向量A(1,…,n)中,元素是整型数。试写出递归算法求出A中的最大和最小元素。【北京邮电大学1994八(10分】18.已知求两个正整数m与n的最大公因子的过程用自然语言可以表述为反复执行如下动作:第一步:若n等于零,则返回叫第二步:若m小于n,则m与n相互交换;否则,保存m,然后将n送m,将保存的m除以n的余数送n。(1)将上述过程用递归函数表达出来(设求x除以y的余数可以用xMODy形式表示)。(2)写出求解该递归函数的非递归算法。【北京航空航天大学2001五(15分】19.写出和下列递归过程等价的非递归过程。PROCEDUREtest(VARsum:integer);VARa:integer,BEGINread(a);IFa=0THENsum:=lELSEBEGINtest(sum);sum:=sum*a;END;write(sum);END;【清华大学1996-]20.试将下列递归过程改写为非递归过程。voidtest(int&sum){intx;scanf(x);if(x=0)sum=0else{test(sum);sum+=x;}printf(sum);)【北京轻工业学院2000三(15分】21.已知Ackermann函数定义如下:n+1当m=0时Ack(E,n)=Ack(m-1,1)当时Aek(m—l,Ack(m,n—1)>当mHOmWO时(1)写出Ack(2,1)的计算过程。(2)写出计算Ack(m,n)的非递归算法。【北京航空航天大学1999六(15分】22.设计算法以求解从集合{L.n}中选取k(k 64中选取2个元素的所有组合的输出结果为:12,13,14,23,24,34。【合肥工业大学2000五、5(8分】 65第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()【北方交通大学2001一、5(2分】A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2若串S产'ABCDEFG',S2='9898',S3='###',S4='012345',执行concat(replace(SI,substr(SI,length(S2),length(S3)),S3),substr(S4,index(S2,'8'),length(S2)))其结果为()【北方交通大学1999一、5(25/7分】A.ABC###G0123B.ABCD###2345C.ABC###G2345D.ABC###2345E.ABC###G1234F.ABCD###1234G.ABCtt##012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串B.联接C.匹配D.求串长【北京邮电大学2000二、4(20/8分)】【西安电子科技大学1996一、1(2分】4.已知串S='aaab',其Next数组值为()。【西安电子科技大学1996—、7(2分】A.0123B.1123C.1231D.12115.串'ababaaababaa'的next数组为(A.012345678999B.0121211112126.字符串,ababaabab'的nextval为()。【中山大学1999一、7]C.011234223456D.0123012322345)A.(0,1,0,1,04,1,0,1)B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1)D.(0,1,0,1,0,1,0,1,1)【北京邮电大学1999一、1(2分】7.模式串t='abcaabbcabcaabdab',该模式串的next数组的值为(),nextval数组的值为().A.01112211123456712C.01110013101100701E.01100111011001701【北京邮电大学1998二、3(2分】8.若串S='software',其子串的数目是((2分]B.01112121123456112D.01112231123456712F.01102131011021701)。【西安电子科技大学2001应用一、2A.8B.37C.36D.99.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数为()。【中科院计算所1997]A.2n-lB.n2C.(n2/2)+(n/2)D.(n2/2)+(n/2)-lE.(n2/2)-(n/2)-lF.其他情况10.串的长度是指()【北京工商大学2001—、6(3分】A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数二、判断题1.KMP算法的特点是在模式匹配时指示主串的指针不会变小。()【北京邮电大学2002一、4(1分】 661.设模式串的长度为叫目标串的长度为n,当n^m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。()【长沙铁道学院1998一、1(1分)】3.串是一种数据对象和操作都特殊的线性表。()【大连海事大学2001KL(1分)】二、填空题1.空格串是指(1),其长度等于(2)。【西安电子科技大学2001软件•、4(2分】2.组成串的数据元素只能是.【中山大学1998一、5(1分】3.一个字符串中称为该串的子串。【华中理工大学2000一、3(1分】4.INDEX('DATASTRUCTURE','STR')=.【福州大学1998二、4(2分)】5.设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为。【重庆大学2000一、4]6.模式串P='abaabcac'的next函数值序列为。【西安电子科技大学2001软件一、7(2分】8.字符串'ababaaab'的nextval函数值为.。【北京邮电大学2001二、4(2分】9.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为(1),,称P为⑵。【西安电子科技大学1998二、5(16/6分】10串是一种特殊的线性表,其特殊性表现在(1);串的两种最基本的存储方式是(2)、⑶:两个串相等的充分必要条件是(4)。【中国矿业大学20003(4分】11.两个字符串相等的充分必要条件是»【西安电子科技大学1999软件一、1(2分】12.知U='xyxyxyxxyxy';t='xxy';ASSIGN(S,U);ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));ASSIGN(m,"')求REPLACE(S,V,m)=。【东北大学1997—、1(5分)】13.实现字符串拷贝的函数strcpy为:voidstrcpy(char*s,char*t)/*copyttos*/{while()【浙江大学1999一、5(3分)】14.下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f("abba")返回1,f("abab")返回0;intf((1)){inti=0,j=0;while(s[j])(2);for(j-;i 67[IF(s[i]=t[j])THEN[k:=l;lengthl:=1;con:=true;WHILEconDOIF(1)THEN[lengthl:=lengthl+l;k:=k+l;]ELSE⑫_;IF(lengthl>length)THEN[index:=i;length:=lengthl;](3);1ELSEU);1(5);]END;程序(b)voidmaxcomstr(orderstring*s,*t;intindex,length){inti,j,k,lengthl,con;index=0;length=0;i=l;while(i<=s.len){j=l;while(j<=t.len){if(s[i]==t[j]){k=l;lengthl=l;con=l;while(con)if(1){lengthl=lengthl+l;k=k+l;}else(2):if(lengthl>length){index=i;length=lengthl;}⑶;)else(4):)⑸}}【上海大学2000一、2(10分】1.完善算法:求KMP算法中next数组。PROCgetnext(t:string,VARnext:ARRAY[l..t.len]OFinteger);BEGINj:=l;k:=(l);next[l]:=0;WHILEj 68WHILE(i 69initstack(s)push(s,x)pop(s)gettop(s)sempty(s)setnull(st)length(st)equal(si,s2)concat(si,s2)sub(s,i,1)empty(st)置s为空栈;元素X入栈;出栈操作;返回栈顶元素;判栈空函数;置串St为空串;返回串St的长度;判串S1和S2是否相等的函数;返回联接si和s2之后的串:返回S中第i个字符;判串空函数FUNCinvert(pre:string;VARexp:string):boolean;{若给定的表达式的前缀式pre正确,本过程求得和它相应的表达式exp并返回“true”,否则exp为空串,并返回“false"。已知原表达式中不包含括弧,opset为运算符的集合。}VARs:stack;i,n:integer;succ:boolean;ch:char:BEGINi:=1;n:=length(pre);succ:=true;(1);(2);WHILE(i 702.给出字符串'abacabaaad'在KMP算法中的next和nextval数组。【北京邮电大学2000三、1(5分】8,令t='abcabaa',求其next函数值和nextval函数值。【北方交通大学1994一(6分】9.已知字符串'cddcdececdea',计算每个字符的next和nextval函数的值。【南京邮电大学2000—2]10.试利用KMP算法和改进算法分别求pl='abaabaa'和p2='aabbaab'的next函数和nextval函数。【东南大学1999一、6(8分】11.前KMP串匹配算法中子串为babababaa,写出next数组改进后的next数组信息值(要求写出数组下标起点)。【西南交通大学2000二、2]12.求模式串T='abcaabbac'的失败函数Next(j)值。【西安交通大学1996四、4(5分)]13.字符串的模式匹配KMP算法中,失败函数(NEXT)是如何定义的?计算模式串p='aabaabaaabc'中各字符的失败函数值.【石油大学1998一、2(10分)】14.设字符串S='aabaabaabaac',P='aabaac'(1)给出S和P的next值和nextval值:(2)若S作主串,P作模式串,试给出利用BF算法和KMP算法的匹配过程。【北方交通大学1998二(15分】15.设目标为1='abcaabbabcabaacbacba',模式为p='abcabaa'(1)计算模式p的naxtval函数值;(5分)(2)不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程。(5分)【清华大学1998八(10分】16.模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为巾,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式P='abcaacabaca',请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。【上海交通大学2000一(5分】17.设目标为$='abcaabbcaaabababaabca',模式为P='babab',(1)手工计算模式P的nextval数组的值;(5分)(2)写出利用求得的nextval数组,按KMP算法对目标S进行模式匹配的过程。(5分)【清华大学1997四(10分】18.用无回溯的模式匹配法(KMP法)及快速的无回溯的模式匹配法求模式串T的next[刃值,添入下面表中:j1234567taabbaabkmp法求得的next[j]值快速无回溯法求得的next[j]值【北京邮电大学1992三、1(25/4分】19.在改进了的(无回溯)字符串模式匹配中,要先求next数组的值。下面是求nextval值的算法。TYPESAR=ARRAYOFINTEGER;PTY=ARRAY[l..m]OFCHAR;PROCEDUREnext2(P:PTY;VARNEXTVAL:SAR);{在模式P中求nextval数组的值}1BEGIN2J:=1;NEXTVAL[1]:=O;K:=O3REPEAT4IF(K=0)OR(P[J]=P[K])5THEN[J:=J+1;K:=K+1;6IFP[J]=P[K]7THENNEXTVAL[J]:=NEXTVAL[K]8ELSENEXTVAL[J]:=K] 711ELSEK:=NEXTVAL[K]2UNTILJ=m3END;算法中第4行有P[J]=P[K],第六行中也有P[J]=P[K]。两处比较语句相同。请分析说明此两处比较语句的含义是什么?分析此算法在最坏情况下的时间复杂度是多少?【北京邮电大学1993二、2(6分】20.在字符串模式匹配的KMP算法中,求模式的next数组值的定义如下:0当j=1时 72END;1.函数voidinsert(char*s,char*t,intpos)将字符串t插入到字符串s中,插入位置为pos»请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)【北京航空航天大学2001六(10分】2.设计一个二分检索的算法,在一组字符串中找出给定的字符串,假设所有字符串的长度为4。(1)简述算法的主要思想;(3分)(2)用PASCAL语言分别对算法中用到的类型和变量作出说明;(3分)(3)用类PASCAL语言或自然语言写算法的非递归过程:(8分)(4)分析该算法的最大检索长度;(3分)(5)必要处加上中文注释。(3分)【山东工业大学1995八(20分】3.设计一PASCAL或C语言的函数atoi(x).其中X为字符串,由0—9十个数字符和表示正负数的组成,返回值为整型数值。【浙江大学1994二(7分)】4.已知字符串S1中存放一段英文,写出算法format(sl,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2,其多余的字符送S3。【首都经贸大学1998三、8(15分】9.串以静态存储结构存储,结构如下所述,试实现串操作equal算法.CONSTmaxlen=串被确认的最大长度TYPEstrtp=RECORDch:ARRAY[l..maxlen]OFchar;curlen:0..maxlenEND;(以一维数组存放串值,并设指示器curlen指示当前串长)【北京轻工业大学1998一(12分]10.编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。【西北大学2000四(10分)】11.写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。【西南交通大学2000三、2]12.已知三个字符串分别为s='ab…abcaabcbca…a',s'='caab",s''='bcb'。利用所学字符串基本运算的函数得到结果串为:s'"='caabcbca…aca…a',要求写出得到上结果串S'”所用的函数及执行算法。【东北大学1998一、1(10分)】13.S="S1S2…Sn”是一个长为N的字符串,存放在一个数组中,编程序将S改造之后输出:(1)将S的所有第偶数个字符按照其原来的下标从大到小的次序放在S的后半部分;(2)将S的所有第奇数个字符按照其原来的下标从小到大的次序放在S的前半部分;例如:S='ABCDEFGHIJKL'则改造后的S为'ACEGIKLJHFDB'。【中科院计算所1995]14.编一程序,对输入的一表达式(字符串),输出其TOKEN表示。表达式由变量A,B,C,常数(数字)0,1,…,9,运算符+,*和括号组成。首先定义符号的类码:符号变量常量*+()类码012345其次定义符号的TOKEN表示: 73其中NAMEL是变量名表(不允许有相同名),CONST是常量表(不允许有相同数)。例如,假设有表达式(A+A*2)+2*B*3#,则将生成如下TOKENL:NAMEL1:4C7:5)A2:01A8:3+B3:3+9:1124:01A10:2*5:2*11:02BCONSL6:11212:2*213:1233【吉林大学1995•(20分)】 74第5章数组和广义表一、选择题1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a”为第一元素,其存储地址为1,每个元素占一个地址空间,则廊的地址为()。【燕山大学2001一、2(2分】A.13B.33C.18D.402.有一个二维数组A[l:6,0:7]每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①)个字节。假设存储数组元素A[l,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②)。若按行存储,则A[2,4]的第•个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(④就•般情况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。供选择的答案:【上海海运学院1998二、2(5分①-④:A.12B.66C.72G.156H.234I.276⑤:A.行与列的上界相同C.行与列的上、下界都相同D.96E.114F.120J.282K.283L.288B.行与列的下界相同D.行的元素个数与列的元素个数相同3.设有数组数组的每个元素长度为3字节,i的值为1到8,j的值为1至也0,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。A.BA+141B.BA+180C.BA+222D.BA+225【南京理工大学1997一、8(2分】4.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则L0C[5,5]=()。[福州大学1998一、10(2分)】A.808B.818C.1010D.10205.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是()。【南京理工大学2001一、13(1.5分】A.1175B.1180C.1205D.12106.有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后•个元素的第一个字节的地址是(①)。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址是(②)和(③)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④)和(⑤【上海海运学院1996二、1(5分】①-⑤:A.28B.44C.76D.92E.108F.116G.132H.176I.184J.1887.将一个A[l..100,1..100]的三对角矩阵,按行优先存入一维数组B[l“298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案:A.198B.195C.197【北京邮电大学1998二、5(2分】8.二维数组A的元素都是6个字符组成的串,行下标i的范围从。到8,列下标j的范圈从1至I」10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要()个字节;(2)A的第8列和第5行共占()个字节;(3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素()的起始地 75址一致。供选择的答案:(1)A.90(2)A.108(3)A.A[8,5]B.180B.114B.A[3,10]C.240C.54C.A[5,8]D.270D.60D.A[0,9]E.540E.150【山东工业大学2000三、(4分】【山东大学1998三、1(4分)】7.二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=l,2,…,10。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素()的起始地址相同。设每个字符占一个字节。【西安电子科技大学1998一、2(2分】A.A[8,5]B.A[3,10]C.A[5,8]D.A[0,9]8.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[l..(n(n+l))/2]中账B中确定a“(i 7620.已知广义表:A=(a,b),B=(A,A),C=(a,(b,A),B),求下列运算的结果:tail(head(tai1(C)))=()。【长沙铁道学院1998三、4(2分)】A.(a)B.AC.aD.(b)E.bF.(A)21.广义表运算式Tail(((a,b),(c,d)))的操作结果是()。【西安电子科技大学1998一、4(2分】A.(c,d)B.c,dC.((c,d))D.d22.广义表L=(a,(b,c)),进亍Tail(L)操作后的结果为()。【中山大学1999一、10]A.cB.b,cC.(b,c)D.((b,c))23.广义表((a,b,c,d))的表头是(),表尾是(【青岛大学2002二、7(2分】A.aB.()C.(a,b,c,d)D.(b,c,d)24.广义表(a,(b,c),d,e)的表头为()。【中山大学1998二、6(2分】A.aB.a,(b,c)C.(a,(b,c))D.(a)25.设广义表1=((a,b,c)),则L的长度和深度分别为().【武汉大学2000二、9]A.1和1B.1和3C.1和2D.2和326.下面说法不正确的是()o【南京理工大学20013(1.5分】A.广义表的表头总是一个广义表B.广义表的表尾总是一个广义表C.广义表难以用顺序存储结构D.广义表可以是一个多层次的结构二、判断题1.数组不适合作为任何二叉树的存储结构。()【南京航空航天大学1995五、2(1分】2.从逻辑结构上看,n维数组的每个元素均属于n个向量。()【东南大学2001—、2(1分)】【中山大学1994一、2(2分】3.稀疏矩阵压缩存储后,必会失去随机存取功能。()【中科院软件所19971(1分】4.数组是同类型值的集合。()【上海海运学院1996一、3(1分)1999一、4(1分】5.数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。()【上海交通大学1998一、5]6.一个稀疏矩阵A«,采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了的转置运算。()【西安交通大学1996二、8(3分)】7.二维以上的数组其实是一种特殊的广义表。()【北京邮电大学2002一、5(1分】8.广义表的取表尾运算,其结果通常是个表,但有时也可是个单元素值。()【南京航空航天大学1996六、2(1分】9.若一个广义表的表头为空表,则此广义表亦为空表。()【中科院软件所1997—、8(1分】【长沙铁道学院1998—、8(1分)】10.广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表。()【合肥工业大学2000二、3(1分】11.所谓取广义表的表尾就是返回广义表中最后一个元素。()【合肥工业大学2001二、3(1分】12.广义表的同级元素(直属于同一个表中的各元素)具有线性关系。() 77【华南理工大学2002一、9(1分】12.对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现。()【华南理工大学2002一、10(1分】13.一个广义表可以为其它广义表所共享。()【山东大学2001一、2(1分】三、填空题1.数组的存储结构采用存储方式。【中山大学1998一、6(1分】2.设二维数组A[-20..30,-30..20],每个元素占有4个存储单元,存储起始地址为200.如按行优先顺序存储,则元素A[25,18]的存储地址为(1);如按列优先顺序存储,则元素A「T8,-25]的存储地址为(2)。【北方交通大学1999二、3(4分】3.设数组a[l..50,L.80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[45,68]的存储地址为(1);若以列序为主序顺序存储,则元素a[45,68]的存储地址为(2)。【华中理工大学2000一、5(2分】4.将整型数组A[L.8,1..8]按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[7,3]的地址是:o1合肥工业大学1999三、4(2分】5,二维数组a[4][5][6](下标从。开始计,a有4*5*6个元素),每个元素的长度是2,则a[2][3][4]的地址是。(设a[0][0][0]的地址是1000,数据以行为主方式存储)【南京理工大学2000二、11(1.5分】6.设有二维数组A[0..9,0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按列优先顺序存储,则元素A[6,6]存储地址为o【北京工商大学2001二、5(4分】7.已知数组A[0..9,0..9]的每个元素占5个存储单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[6,8]的地址为。【合肥工业大学2001三、4(2分】8.已知二维数组A1L.10,0..9]中每个元素占4个单元,在按行优先方式将其存储到起始地址为1000的连续存储区域时,A[5,9]的地址是:。【厦门大学2002六、5(4分)】9.用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j](iWiWn,i-2WjWi+2),B中的第8个元素是A中的第(1)行,第(2)列的元素。【北京邮电大学2001二、3(4分】10.设数组A[0..8,1..10],数组中任一元素A[i,j]均占内存48个二进制位,从首地址2000开始连续存放在主内存里,主内存字长为16位,那么(1)存放该数组至少需要的单元数是;(2)存放数组的第8列的所有元素至少需要的单元数是;(3)数组按列存储时,元素A[5,8]的起始地址是。【中国矿业大学2000一、4(4分】11.设n行n列的下三角矩阵A已压缩到一维数组B[l..n*(n+1)/2]中,若按行为主序存 78储,则A[i,j]对应的B中存储位置为。【武汉大学2000一、1】6.n阶对称矩阵a满足a[i][j]=a[j][i],i,j=l..n,,用一维数组t存储时,t的长度为(1)>当i=j,a[i]⑵],i> 7923.已知广义表A=(((a,b),(c),(d.e))),head(tai1(tail(head(A))))倘果是o【合肥工业大学2001三、5(2分】24.利用广义表的GetHead和GetTail操作,从广义表L=((app1e,pear),(banana,orange))中分离出原子banana的函数表达式是。【山东大学2001三、6(2分)】25.已知a数组元素共5个,依次为12,10,5,3,1;b数组元素共4个,依次为4,6,8,15,则执行如下所示的过程语句sort后得到c数组各元素依次为15,12,10,8,6,5,4,3,1;数组a,b,c的长度分别为1=5,m=4,n=9请在程序中方框内填入正确的成分,完成上述要求。PROCEDUREsort;VARi,j,k,x:integer;d:ARRAY[1..m]OFinteger;BEGINFORi:=lTOmDOd[i]:=llj;i:=l;j:=l;k:=l;WHILE(i<=l)AND(j<=m)DOBEGINIFa[i]>d[j]THENBEGINS_;(3)_ENDELSEBEGIN(4);(5)END;c[k]:=x;(6)END;WHILE(7)DOBEGINc[k]:=a[i];k:=k+l;i:=i+l;END;WHILE(8)DOBEGINc[k]:=d[j];k:=k+l;j:=j+l;END;END.{sort}【上海交通大学1998七(12分)】26.下列程序段search(a,n,k)在数组a的前n(n>=l)个元素中找出第k(K=k<=n)小的值。这里假设数组a中各元素的值都不相同。#defineMAXN100inta[MAXN],n,k;intsearch_c(inta[],intn,intk){intlow,high,i,j,m,t;k一,;1ow=0;high=n-l;do{i=low;j=high;t=a[low];do{while(i 80structglistnode*next;union{chardata;struct{structglistnode*hp,*tp;)ptr;}val;}*glist,gnode;glistreverse(p)glistp;{glistq,h,t,s;if(p二二NULL)q=NULL;else{if(1){q=(glist)malloc(sizeof(gnode));q->tag=0;q->val.data=p->val.data;}else{(2)if13)_{t=reverse(p->val.ptr.tp);s=t;while(s->val.ptr.tp!=NULL)s=s->val.ptr.tp;s->val.ptr.tp=(glist)malloc(sizeof(gnode));s=s->val.ptr.tp;s->tag=l;s->val.ptr.tp=NULL;s->val.ptr.hp=h;(4)}else{q=(glist)malloc(sizeof(gnode));q->tag=l;q->val.ptr.tp=NULL;(5);})}return(q);)【上海大学2002六、3(10分】23.完善下列程序,每小题在PASCAL语言(a)和C语言(b)中任选一题。下面的程序将数列1,2,3二・・川*4依次按蛇型方式存放在二维数组人[1.・山1.・可书即(示意置I编者略)。(a)算法的PASCAL语言程序描述(编者略):(b)算法的C语言程序描述:#defineNMAX10#include“stdio.h"main(){inti,j,n,k,p,q,m;inta[NMAX][NMAX];scanf(,&n);m=l;for(k=l;U);k++){if(k 81"); 82}})【上海大学2002六、1(10分】23.约瑟夫环问题:设有n个人围坐一圈,并按顺时针方向1-n编号。从第s个人开始进行报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m的报数进行下去,直到所有的人都出圈为止。PROCEDUREJosef(A:ARRAY[1..n]OFinteger;s,m:integer);BEGINFORi:=1TOnDOA[i]:=i;sl:=s;FORi:=nDOWNTO2DOBEGINsl:=3;〃计算出圈人siIFsl=0THEN12);w:=A[sl];〃A[sl]出圈FORi:=(3)DOA[j]:=A[j+l];A[i]:=w;END;write('出圈序列为:');//输出出圈序列FORi:=nDOWNTO1DOwrite(A[i]);writein;END;【华南师范大学2000五、2(9分)】24.设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为Wi,W2,...»WI1O问能否从这n件物品中选择若干件放入背包,使得放入的重量之和正好是So设布尔函数Knap(S,n)表示背包问题的解,W.(i=l,2,...,n)均为正整数,并已顺序存储地在数组W中。请在下列算法的下划线处填空,使其正确求解背包问题。Knap(S,n)若S=0则Knap■•-true否则若(S<0)或(S>0且n 831.设有三维数组A[-2:4,0:3,-5:1]按列序存放,数组的起始地址为1210,试求A(l,3,-2)所在的地址。【长沙铁道学院1997三、1(3分)】2.三维数组A[l..10,-2..6,2..8]的每个元素的长度为4个字节,试问该数组要占多少个字节的存储空间?如果数组元素以行优先的顺序存贮,设第一个元素的首地址是100,试求元素A[5,0,7]的存贮首地址。【上海海运学院1995三(6分)1997三(8分】3.设有五对角矩阵A=(aQm”。,按特殊矩阵压缩存储的方式将其五条对角线上的元素存于数组A[TO:m]中,计算元素A[15,16]的存储位置。【东北大学1999一、2(4分】4.数&A[0..8,1..10]的元素是6个字符组成的串,则存放A至少需要多少个字节?A的第8列和第5行共占多少个字节?若A按行优先方式存储,元素A[8,5]的起始地址与当A按列优先方式存储时的哪个元素的起始地址一致?【厦门大学2000五、3(14%/3分)】9.若按照压缩存储的思想将nXn阶的对称矩阵A的下三角部分(包括主对角线元素)以行序为主序方式存放于一维数组B[l..n(n+l)/2]中,那么,A中任一个下三角元素a“(i》j),在数组B中的下标位置k是什么?【北京航空航天大学1998一、4(4分】10.设mXn阶稀疏矩阵A有t个非零元素,其三元组表表示为LTMA[1..(t+1),1..3],试问:非零元素的个数t达到什么程度时用LTMA表示A才有意义?【北京航空航天大学1998一、5(4分】11.利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间。【西北工业大学1998三、2(5分)】12.对一个有t个非零元素的A.“矩阵,用的数组来表示,其中第0行的三个元素分别为m,n,t,从第一行开始到最后一行,每行表示一个非零元素;第一列为矩阵元素的行号,第二列为其列号,第三列为其值。对这样的表示法,如果需要经常进行该操作一确定任意一个元素在B中的位置并修改其值,应如何设计算法可以使时间得到改善?【长沙铁道学院1998四、4(6分)】13.有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,那么存储数组的最后一个元素的第一个字节的地址是多少?若按行存储,则A[3,5]和A[5,3]的第一个字节的地址是多少?若按列存储,则A[7,l]和A[2,4]的第一个字节的地址是多少?【上海海运学院1999三(10分】14.设有三对角矩阵(an).刈,将其三条对角线上的元素逐行的存于数组B(l:3n-2)中,使得B[k]=ai,j,求:(1)用i,j表示k的下标变换公式;(2)若n=10’,每个元素占用L个单元,则用B[K]方式比常规存储节省多少单元。【西安电子科技大学1996二、4(5分】15.已知A为稀疏矩阵,试从空间和时间角度,比较采用两种不同的存储结构(二维数组和之aii三元组表)完成求运算的优缺点。【西安电子科技大学1996二、6(5分】16.特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?为什么?【北京邮电大学2001三、1(5分】17.试叙述一维数组与有序表的异同。【西安电子科技大学1999计应用一、2(5分】18.一个nXn的对称矩阵,如果以行或列为主序存入内存,则其容量为多少?【西安电子科技大学1999计应用一、3(5分】19.给出数组A:ARRAY[3..8,2..6]OFINTEGER;当它在内存中按行存放和按列存放时,分别写出数组元素A[i,j]地址计算公式(设每个元素占两个存储单元)。【南开大学1998一(8分)】20.已知n阶下三角矩阵A(即当i 84B[k]=a”,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变化公式。【山东科技大学2001一、6(6分)】【长沙铁道学院1997五、1(10分)】【东北大学2002一(4分)】【北京工业大学2000二、1(9分)】【南京航空航天大学2000四】10.算法Print及所引用的数组A的值如下,写出调用Print(1)的运行结果(其中n=15)。123456789101112131415ABCDEFG00H0IJKLPROCEDUREprint(i:integer);BEGINIF(i<=n)AND(A[i]<>'0')THENBEGINPrint(2*i);write(A[i]);Print(2*i+l);END;END;【合肥工业大学1999四、1(5分】11.设数组A的长度为2N,前N个元素A[1..N]递减有序,后N个元素A[N+1..2N]递增有序且2N是2的整数次暴,即k=lo32N为整数。例如A[1..8]=[90,85,50,10,30,65,80,100]满足上述要求,这里N=4,k=3,A的前4个元素和后4个元素分别递减和递增有序。用此例调用如下的Demo过程,并要求:(1)给出for循环中每次执行PerfectShuffle(A,N)和CompareExchange(A,N)的结果;(2)解释Demo的功能;(3)给出Demo的时间复杂度。PROCEDUREPerfectShuffle(VARA:arraytype;N:integer)[i:=l;j:=l;WHILEi<=NDO[B[j]:=A[i];B[j+1]:=A[i+N];i:=i+l;j:=j+2;]A[l..2N]:-B[l..2N];//BcopytoA]PROCEDURECompareExchange(VARA:arraytype;N:integer)[j:=l;WHILEj<2NDO[IFAU]>A[j+l]THENA[j]-fA[j+1];//交换A[j]和A[j+1]j:=j+2;]]PROCEDUREDemo(VARA:arraytype;N:integer)//A的长度为2N,k=log22N为整数[FORi:=lTOlog22NDO[PerfectShuffle(A,N);CompareExchange(A,N);]]【中科院计算所1998四(15分)】【中国科技大学19984(15分】12.现有算法及正整数n和数组A如下,求数组C的值。VARA,B,C:Array[1..100]ofinteger;FUNCAAA(s,t:integer):integer;IFs=tTHENIFB[s]=0THENAAA:=SELSEAAA:=-sELSEBEGINl:=AAA(s,(s+t)DIV2);r:-AAA((s+t)DIV2+1,t);IFl>0THENAAA:=1ELSEAAA:=r;IF(r>0)AND(A[l]>A[rJ)THENAAA:=rEND 85ENDF;PROCBBB:FORi:-lTOnDOB[i]:=0;FORi:=lTOnDOB[AAA(1,n)]:-i;FORi:=lTOnDOC[B[i]]:=A[i];ENDP;初始值:n=10,A={121,22,323,212,636,939,828,424,55,262);【北京邮电大学2002五、1(10分】21333117125.设有矩阵a且@=「"」执行下列语句后,矩阵c和a的结果分别是什么?(1)FORi:=lTO3DOFORj:=lTO3DOc[i,j]:=a[a[i,j],a[j,i]](2)FORi:=lTO3DOFORj:=lTO3DOa[i,j]:=a[a[i,j],a[j,i]]【浙江大学1997三(8分)】'213一331I2126.设矩阵A为「"1」(1)执行语句FORi:=lTO3DOFORj:=lTO3DO①C[i,j]:=A[A[i,j],A[j,i]]结果C矩阵的值是什么?(2)所选择的下标i,j的次序有关系吗?(3)在语句①中,用A代替C,A的结果值是什么?(4)对i,j这对下标取反序,即(3,3),(3,2),(3,1),,(1,3),(1,2),(1,1)重复执行(3),把所得结果与(3)中所得结果作比较。【吉林大学1995二(15分)】27.指出下列算法中错误、低效之处,并将其改成一个正确且高效的算法。PROCEDUREdeIk(A,m,last,i,k);{从数组A[1..last]中删除第i个元素起的k个元素,m为A上限}BEGINIF(i 86PROCDemo(A,B,k){(l)FORi:=lTOkDOC[i]:=0;(2)FORj:=lTOnDOC[A[j]]:=C[A[j]]+l;(3)FORi:=2TOkDOC[i]:=C[i]+C[i-1](4)FORj:=nDOWNTO1DO{⑸B[C[A[j]]]:=A[j];(6)C[A[j]]:=C[A[j]]-l}}(a).当标号(2)行的循环执行完后,C[i](l<=i<=n)的值有何意义? 87(a).当标号(3)行的循环执行完后,C[i](l<=i<=n)的值有何意义?(b).算法执行后,B的内容有何特点?(c).当k=O(n)时,算法的时间复杂度是多少?【中科院软件所1997二、2(9分】28.上三角阵A(N*N)按行主序压缩存放在数组B中,其中A[i,j]=B[k].写出用i,j表示的ko【北京工业大学2001二、1(5分)】29.设有上三角矩阵(a”)M“将其上三角中的元素按先行后列的顺序存于数组B(l:m)中,使得B[k]=a“且k=fl(i)+f2(j)+c,请推导出函数fl,f2和常数c,要求fl和f2中不含常数项。【中科院自动化所1999]【山东科技大学2002一、5(6分】一2004一0030030030.设矩阵A*00°.(1)若将A视为对称矩阵,画出对其压缩存储的存储表,并讨论如何存取A中元素aiJ(0<=i,j<4);(2)若将A视为稀疏矩阵,画出A的十字链表结构。【北京科技大学1997三(10分】'10020300000532.设对称矩阵A=2050(1)若将A中包括主对角线的下三角元素按列的顺序压缩到数组S中,即S:1002300050下标:12345678910试求出A中任一元素的行列下标[i,j]j〈=4)与S中元素的下标K之间的关系.(2)若将A视为稀疏矩阵时,画出其三元组表形式压缩存储表。【北京科技大学1999三(10分】200001002100000133.设对角线矩阵A=12101210001’35行列下标i,j满足:IWi,j<5)(1)若将矩阵A压缩存储到数组S中:下标:123456789101112130035试求出A中已存储之元素的行列下标(i,j)与S中元素的下标K之间的关系(2)若将A视为稀疏距阵时,请画出其行逻辑链接顺序表。【北京科技大学2000三(10分)】34.设有一个三维数组a[cl:dl,c2:d2,c3:d3],其中ci:di是第i维的界偶,如该数组在内存中按行排列,且a[cl,c2,c3]的地址为a0,那么请导出下标变量a[il,i2,i3]的地址,假设每个元素占L个单元。 8835.假定有下列nxn矩阵"all0......0a 890a22......a2,n—100n+1n4-1Q,22...00..A二anl00ann【山东师范大学1999四、1(5分】n为奇数)如果用一维数组B按行主次序存储A的非零元素,问:(1)A中非零元素的行下标与列下标的关系:(2)给出A中非零元素a”的下标(i,j)与B中的下标R的关系;(3)假定矩阵中每个元素占一个存贮单元且B的起始地址为Ao,给出利用a“的下标(i,j)定位在B中的位置公式。【上海交通大学1998三(12分)】36.对于一个对称矩阵采用压缩存储,只存放它的上三角部分,并按列存放。例如对于-一个n*n的对称矩阵A(如右图),用一个一维数组B来存放它的上三角部分:B-[All,A12,Az2,A13>A23,A33,A|.|>…,Ain,A?n»…,Ann]同时有两个函数:MAX(i,j)和MIN(i,j),分别计算下标i和j中的大者与小者。试利用它们给出求任意一个Aij在B中存放位置的公式。(若式中没有MAX(I,j)和MIN(i,j)则不给分)【清华大学1997五(10分)】37.用三元数组表示稀疏矩阵的转置矩阵,并简要写出解题步骤。【山东工业大学1995五(10分】38.简述广义表属于线性结构的理由。【西北大学2000一、5(3分)】39.数组,广义表与线性表之间有什么样的关系?【西北工业大学1998一、2(4分)】40.什么是广义表?请简述广义表和线性表的主要区别。【北京大学1997二、2(5分】41.求下列广义表的运算结果。【南京航空航天大学1998三(10分】(1)CAR(CDR(((a,b),(c,d),(e,f))))(2)CDR(CAR(((a,b),(c,d),(e,f))))(3)CAR(CDR(CAR(((a,b),(e,f)))))(4)CDR(CAR(CDR(((a,b),(e,f)))))(5)CDR(CDR(CAR(((a,b),(e,f)))))注:CAR运算相当于有些教材中的Head运算,CDR运算相当于Tai1运算。42.利用广义表的Head和Tail运算,把原子d分别从下列广义表中分离出来,Ll=(((((a),b),d),e))5L2=(a,(b,((d)),e)).【北方交通大学1996一、2(5分】类似本题的另外叙述有:(1)已知广义表L=((((a))),((b)),(c),d),试利用head和tail运算把原子项c从L中分离出来。【北京邮电大学1992三、2(25/4分)】【青岛海洋大学1999一、6(5分】(2)画出下列广义表的存储结构图,并利用取表头和取表尾的操作分离出原子e。(a,(0,b),(((e)))).【清华大学1995二(10分】(3)已知广义表A=((a,b,c),(d,e,f))试写出从表A中取出原子元素e的运算。【西安电子科技大学1996二、3(5分】(4)请将香蕉banana用工具H()—Head(),T()—Tail()从1中取出。 90L=(apple,(orange,(strawberry,(banana)),peach),pear)【北京邮电大学2000三、2(5分】(5)试利用广义表取表头head(1s)和取表尾tail(Is)的基本运算,将原子d从下列表中分解出来,请写出每一步的运算结果。L=((a,(b)),((c,d)),(e,f))【北京工商大学2001三(10分】(6)画出广义表A=(a,(b,()),(((),c)))的第一种存储结构(表结点第二指针指向余表)图,并用取首元(head。)和取尾元(tail())函数表示原子c。【北京工业大学2001二、2(5分)】42.画出下列广义表的两种存储结构图((),A,(B,(C,D)),(E,F))。【南京航空航天大学1999三(10分】43.假设采用以下两种结点的链表作为广义表的存贮结构,表结点:(tag=l,hp,tp),元素结点;(tag=0,data)。请画出下列广义表的存储结构图,并求它的深度和长度。((),((()),((()))))【北方交通大学1998一(13分】44.知广义表人=(((a)),(b),c,(a),(((d,e))))(1)画出其一种存贮结构图;(2)写出表的长度与深度;(3)用求头部,尾部的方式求出e。【利匕大学1997一、2(5分)】45.画出具有共享结构广义表(((b,c),d),(a),((a),((b,c),d)),e,())的存贮表示。【北京工业大学1996一、3(6分)】46.广义表的结点结构如下:(TAG,DATA,LINK)。其中LINK为指向表中下一元素的指针;TAG为标志域;DATA为数据域,具体含义如下:TAG=O表示该结点为原子结点,DATA为其数据;TAG=1表示该结点为一个子表,DATA为指向该子表的指针。(1)说明下列算法A的功能(注:算法中p,t,m,n,r,q为指针;算法中的NIL对应图中的~)PROCEDUREA(p,t)BEGINq:=NIL;WHILEpONILDOBEGINIFp'.TAGOOTHENBEGINm:=p".DATA;A(m,n);p".DATA:=n;END;r:=p*.LINK;p".LINK:=q;q:=P;p:=rEND;t:=q;END.(2)对于p所指的广义表,画出执行算法A后的表结构以及p,t的值:【北方交通大学1993六(20分】 91类似本题的另外叙述有:题目基本相同,差别仅在于子表(b,c)与原子d的前后顺序颠倒。【浙江大学1994六(7分)】42.写出对广义表A=(x,((a,b),c,d))作运算head(head(tail(A)))后的结果。【西安电子科技大学2000计应用一、5(5分】43.写出广义表的运算结果:TAIL[HEAD[TAIL[((a,b),(c,d))]]]=?【武汉交通科技大学1996二、7(3分)】44.广义表中原子个数是否即为广义表的长度?【西安电子科技大学2000计应用一、9(5分】45.给出下列所示的3元多项式的广义表表示(分别以X”X-4第一到第三层变元)P(XiXjXa)=X15X23X3+2Xi5X22X34+5Xi5X23X33+3XiX24X32+X2X3+6【华南理工大学2001一、2(4分】52.设某表H如下:ABCXala2blclc2其中A,B,C为子表名,al,a2,bl,cl,c2,x为其元素。(1)试用广义表形式表示H,并写出运算HEAD(H)和TAIL(H)函数从H中取出单元素a2的运算;(2)画出表H的链式存储结构;【北京科技大学1998三(10分)】五算法设计题1.设有大小不等的n个数据组(n个数据组中数据的总数为m),顺序存放在空间区D内,每个数据占一个存储单元,数据组的首地址由数组S给出,(如下图所示),试编写将新数据x插入到第i个数据组的末尾且属于第i个数据组的算法,插入后,空间区D和数组S的相互关系仍保持正确。【东北大学2000六(15分)】2.以三元组表存贮的稀疏矩阵A,B非零元个数分别为m和no试用类PASCAL语言编写时间复杂度为0(m+n)的算法将矩阵B加到矩阵A上去。A的空间足够大,不另加辅助空间。要求描述所用结构。【北京工业大学1997三(10分)】3.设整数a,X2,…,a已存放在数组A中,编写一PASCAL递归过程,输出从这n个数中取出所有k个数的所有组合(k〈=n)。例:若A中存放的数是1,2,3,4,5,k为3,则输出结果应为:543,542,541,532,531,521,432,431,421,321。【山东大学1992五(13分)】类似本题的另外叙述有:(1)题目基本相同,只是叙述不同,要求用PASCAL语言。【东南大学2001三(10分】4.编写一个过程,对一个nXn矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。【中科院软件所1996]5.设原来将N个自然数1,2,…,N按某个顺序存于数组A中,经过下面的语句计算,使A[I]的值变为A[l]到中小于原A[I]值的个数。FORI:=NDOWNTO1DO 92BEGINC:=0;FORJ:=1TO1-1DOIFA[J] 93【南京航空航天大学1997八(12分】【中科院计算所1996]8.设二维数组l..n]含有m*n个整数。(1)写出算法(pascal过程或c函数):半蜥a中所有元素是否互不相同?输出相关信息(yes/no);(2)试分析算法的时间复杂度。【华中理工大学1999五(10分】9.二项式(a+b)”展开式的系数为C(n,0)=1,C(n,n)=1,对于n>=0C(n,k)=C(n-1,k)+C(n-1,kT),对于0 94rowcolvaldownright它们已用val域链接成循环链表。非零元的结点形式也同上,每一行(列)的非零元由right(down)域把它们链接成循环链表,该行(列)的表头结点即为该行(列)循环链表的表头。【上海大学1998五(16分】12.试编写建立广义表存储结构的算法,要求在输入广义表的同时实现判断、建立。设广义表按如下形式输入(a1,az,as,…,eu)n>=0,其中ai或为单字母表示的原子或为广义表,n=0时为只含空格字符的空表。(注:算法可用类pascal或类c书写)【北京工业大学1998十(15分)】13.广义表是n(n>=0)个数据元素a1,a2,a”…,a”的有限序列。其中a,(l<=i<=n)或者是单个数据元素(原子),或仍然是一个广义表。广义表的结点具有不同的结构,即原子结点和子表元素结点,为了将两者统一,用了一个标志tag,当其为0时表示是原子结点,其data域存储结点值,1ink域指向下一个结点,当其tag为1时表示是子表结点,其sublist为指向子表的指针。因此,广义表可采用如下结构存储:TYPEglist="gnode;gnode=RECORDlink:glist;CASEtag:0..1OF0:(data:char);1:(sublist:glist)END;(1)画出广义表((a,b),c)的存储结构;(2)写出计算一个广义表的原子结点个数的递归算法表示式;(3)编写实现上述算法的过程或函数程序。【厦门大学2002三(12分)】17.广义表GL=(a“&,…,aj,其中ak(k=l,2n)或是单个数据元素(原子),或仍然是个广义表。给定如下有关广义表的类型定义:TYPEtagtype=0..1;glist=gnode;gnode=RECORDlink:glist;{link域指向下一个结点}CASEtag:tagtypeOF{tag=0表示原子结点}0:(data:integer);1:(sublist:glist)END;编写一个过程或函数计算一个广义表的所有原子结点数据域之和,例如对广义表(3,(2,4,5),(6,3))数据域之和为23。【厦门大学2000四、2(9分)】18.数组H[1:1000]中存放着1000个大小不同的正整数;(1)选择一分类算法使能最快地得到其中10个最大的数,简要说明理由;(2)编写一程序seek。,执行该程序时,在命令行中提供二个参数:seekan 95输出结果为:1,4,7第一个数组9,12,28,29,45第二个数组【上海大学1998四(20分】19.设数组A[L.n]中,A[n-2k+l..n-k]和[n-k+l..n]中元素各自从小到大排好序,试设计一个算法使A[n-2k+l..n]按从小到大次序排好序。并分析算法所需的计算时间。【福州大学1998四、3(10分)】20.设A[l..100]是一个记录构成的数组,B[L.100]是一个整数数组,其值介于1至100之间,现要求按B[l..100]的内容调整A中记录的次序,比如当时,则要求将A[l]的内容调整到A[ll]中去。规定可使用的附加空间为0(1)。【中科院计算所2000七(15分)】22.给定有m个整数的递增有序数组和有n个整数的递减有序数组b[l..n],试写出算法:将数组a和b归并为递增有序数组c[l..m+n]。(要求:算法的时间复杂度为0(m+n))【华中理工大学2000八、1(10分】23.在数组A[l..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个。【南京理工大学1998七、2(7分】 96弟八早树和二叉树一、选择题1.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()A.-A+B*C/DEB.-A+B*CD/EC.-+*ABC/DED.-+A*BC/DE【北京航空航天大学1999一、3(2分)】2.算术表达式a+b*(c+d/e)转为后缀表达式后为()【中山大学1999一、5]A.ab+cde/*B.abcde/+*+C.abcde/*++D.abcde*/++3.设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是()(+T'v【南京理工大学1999一、20(2分】QQc)GfA.A*B+C/(D*E)+(F-G)B.(A*B+C)/(D*E)+(F-G)\C.(A*B+C)/(D*E+(F-G))D.A*B+C/D*E+F-G3®$4.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为()A.5B.6C.7D.8【南京理工大学2000一、8(1.5分】5.在下述结论中,正确的是()【南京理工大学1999一、4(1分】①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。A.①②③B.②③④C.②④D.①④6.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是()A.m-nB.m-n-1C.n+1D.条件不足,无法确定【南京理工大学2000一、17(1.5分】7.树是结点的有限集合,它((1))根结点,记为T。其余结点分成为m(m>0)个((2))的集合Tl,T2,…,Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点•个结点的子结点个数称为该结点的((3))。二叉树与树是两个不同的概念,二叉树也是结点的有限集合,它((4))根结点。可以把树的根结点的层数定义为1,其他结点的层数等于其父结点所在层数加上1。令T是一棵二叉树,Ki和Kj是T中子结点数小于2的结点中的任意两个,它们所在的层数分别为入Ki和AKj,当关系式|XKi-XKj|W1一定成立时,则称T为一棵((5))。供选择的答案:(1)(4)A.有。个或1个B.有。个或多个C.有且只有一个D.有1个或1个以上C.允许叶结点相交D.允许树枝结点相交C.次数D.序C.平衡树D.完全树【上海海运学院1999二、(2)A.互不相交B.允许相交(3)A.权B.维数(5)A.丰满树B.查找树2(5分)8.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9B.11C.15D.不确定【北京工商大学2001—.7(3分)】9.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为。的结点数为()个A.4B.5C.6D.7【哈尔滨工业大学2001二、2(2分】 978.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为Ml,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是()。【北方交通大学2001一、16(2分】A.MlB.M1+M2C.M3D.M2+M39.具有10个叶结点的二叉树中有()个度为2的结点,【北京航空航天大学2000—、5(2分)】A.8B.9C.10D.1110.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()【西安交通大学1996三、2(3分)】A.250B.500C.254D.505E.以上答案都不对11.设给定权值总数有n个,其哈夫曼树的结点总数为()【福州大学1998一、5(2分)】A.不确定B.2nC.2n+lD.2n-l12.有n个叶子的哈夫曼树的结点总数为()。【青岛大学2002二、1(2分】A.不确定B.2nC.2n+lD.2n-l13.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为()。【中科院计算所1999一、2(2分】A.n-lB.Ln/mJ-1C.F(n-l)/(m-l)1D.「n/(mT)l-lE.F(n+1)/(m+l)"|-l16.有关二叉树下列说法正确的是()【南京理工大学200011(1.5分】A.二叉树的度为2B.一棵二叉树的度可以小于2C.二叉树中至少有一个结点的度为2D.二叉树中任何一个结点的度都为217.二叉树的第I层上最多含有结点数为()【中山大学1998二、7(2分)】【北京理工大学2001六、5(2分】A.21B.2"-1C.21'1D.21-118.一个具有1025个结点的二叉树的高卜为(”南京理工大学1999一、19(2分】A.11B.10C.11至1025之间D.10至1024之间19.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2hB.2h-lC.2h+lD.h+1【南京理工大学2001—、11(1.5分】20.对于有n个结点的二叉树,其高度为()【武汉交通科技大学1996一、5(4分)】A.nloganB.log2nC.LloganJl+1D.不确定21.一棵具有n个结点的完全二叉树的树高度(深度)是()【南京理工大学1996—、8(2分】A.LlognJ+1B.logn+1C.LlognJD.logn-122.深度为h的满m叉树的第k层有()个结点。(l= 98A.2kB.2ktC.2k-1D.2k'T22.一棵树高为K的完全二叉树至少有()个结点【南京理工大学1998一、3(2分】A.2k-1B.2k'1-1C.2k1D.2k23.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度OA.4B.5C.6D.7【南京理工大学2000—、51.5分】24.利用二叉链表存储树,则根结点的右指针是()o【青岛大学2001五、5(2分】A.指向最左孩子B.指向最右孩子C.空D.非空25.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。【北京理工大学2000一、4(2分】A.先序B.中序C.后序D.从根开始按层次遍历29.树的后根遍历序列等同于该树对应的二叉树的().【北京理工大学2001六、6(2分】B.中序序列C.后序序列A.先序序列30.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。A.前序B.中序C.后序D.按层次【北京航空航天大学1999一、4(2分]31.在下列存储形式中,哪一个不是树的存储形式?()【北方交通大学2001一、23(2A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法32.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是()【北京工业大学2001一、2(2分)】A.CABDEFGB.ABCDEFGC.DACEFBGD.ADCFEG33.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为().A.CBEFDAB.FEDCBAC.CBEDFAD.不定【浙江大学1999四、2(4分)】34.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是(A.acbedB.decabC.deabcD.cedba【山东大学2001二、7(1分)】35.某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则前序序列是:A.E,G,F,A,C,D,BB.E,A,C,B,D,G,FC.E,A,G,C,F,B,DD.上面的都不对【南京理工大学2000一、14(1.5分】36.上题的二叉树对应的森林包括多少棵树()【南京理工大学2000一、15(1.5分】A.1B.2C.3D.概念上是错误的37.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG。该二叉树根的右子树的根是:【北方交通大学2001一、21(2分】A、EB、FC、GD、H38.将一棵树t转换为孩子一兄弟链表表示的二叉树h,则t的后根序遍历是h的A.前序遍历B.中序遍历C.后序遍历()【北京邮电大学2001一、 992(2分】39.某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,…,n,且有如下性质:T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。这时是按()编号的。A.中序遍历序列B.前序遍历序列C.后序遍历序列D.层次顺序【长沙铁道学院1998三、1(2分)】40.下面的说法中正确的是().(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;(2)按二叉树定义,具有三个结点的二叉树共有6种。A.(1)(2)B.(1)C.(2)D.⑴、(2)都错【南京理工大学2001一、10(1.5分】41.对于前序遍历与中序遍历结果相同的二叉树为(1);对于前序遍历和后序遍历结果相同的二叉树为(2)。【中科院计算所1999一、4(4分)】A.一般二叉树B.只有根结点的二叉树C.根结点无左孩子的二叉树D.根结点无右孩子的二叉树E.所有结点只有左子数的二叉树F.所有结点只有右子树的二叉树42.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()【南开大学2000一、2]A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树43.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序()A.都不相同B.完全相同C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同【北方交通大学2001一、25(2分】44.某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。【武汉大学2000二、4]A.空或只有一个结点B.任一结点无左子树C.高度等于其结点数D.任一结点无右子树45.在完全二叉树中,若一个结点是叶结点,则它没(【北方交通大学2001-、22(2分】A.左子结点B.右子结点C.左子结点和右子结点D.左子结点,右子结点和兄弟结点46.在下列情况中,可称为二叉树的是()A.每个结点至多有两棵子树的树树的有序树D.每个结点只有一棵右子树B.哈夫曼树C.每个结点至多有两棵子E.以上答案都不对【西安交通大学1996三、4(3分)】47.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:()A.不确定B.0C.1D.2【合肥工业大学1999一、5(2分】48.•棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:()oA.0B.1C.2D.不确定【合肥工业大学2000一、5(2分】49.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为()【南京理工大学1996—、6(2分)】A.X的双亲B.X的右子树中最左的结点C.X的左子树中最右结点D.X的左子树中最右叶结点50.引入二叉线索树的目的是()A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲D.使二叉树的遍历结果唯一【南京理工大学1998—、5(2分】51.线索二叉树是一种()结构。 100A.逻辑B.逻辑和存储C.物理D.线性【西安电子科技大学1996—、9(2分】52.n个结点的线索二叉树上含有的线索数为()A.2nB.n-1C.n+1D.n【中山大学1998二、8(2分】53.()的遍历仍需要栈的支持.A.前序线索树B.中序线索树C.后序线索树【中科院计算所1999一、1(2分)】54.二叉树在线索后,仍不能有效求解的问题是()。A.前(先)序线索二叉树中求前(先)序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后序后继【武汉大学2000二、3二、5]55.设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有()个。A.n-1B.nC.n+1D.n+2【西安电子科技大学1998一、10(2分】56.如果T?是由有序树T转换而来的二叉树,那么T中结点的后序就是T?中结点的().A.先序B.中序C.后序D.层次序【西安电子科技大学1996—、2(2分】57.由3个结点可以构造出多少种不同的有向树?()A.2B.3C.4D.5【北方交通大学2001—、6(2分】58.由3个结点可以构造出多少种不同的二叉树?()A.2B.3C.4D.5【北方交通大学2001一、7(2分】59.下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()。A.二叉排序树B.哈夫曼树C.AVL树D.堆【中国科技大学1998二、8(2分)】【中科院计算所1998二、8(2分】60.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树,该说法()oA.正确B.错误【中国科技大学1998二、10(2分)】【中科院计算所1998二、10(2分)ZWihi61.最优二叉树(哈夫曼树)、最优查找树均为平均查找路径长度日最小的树,其中对最优二叉树,n表示(1),对最优查找树,n表示(2),构造这两种树均(3)。【中科院计算所1999—,3(6分】A.结点数B.叶结点数C.非叶结点数D.度为2的结点数E.需要一张n个关键字的有序表F.需要对n个关键字进行动态插入G.需要n个关键字的查找概率表H.不需要任何前提62.下述编码中哪一个不是前缀码()。【中科院计算所2000一、2(2分】A.(00,01,10,11)B.(0,1,00,11)C.(0,10,110,111)D.(1,01,000,001)63.下面几个符号串编码集合中,不是前缀编码的是()«A.{0,10,110,1111}B.{11,10,001,101,0001)C.{00,010,0110,1000}D.{b,c,aa,ac,aba,abb,abc}【西安电子科技大学2001应用一、6(2分】64.当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组A[l..n]中时,数组中第i个结点的左孩子为()【南京理工大学1999一、18(2分】A.A[2i](2i= 101B.当K21时高度为K的二叉树至多有21'个结点。C.用树的前序周游和中序周游可以导出树的后序周游。D.线索二叉树的优点是便于在中序下查找前驱结点和后继结点。E.将--棵树转换成二叉树后,根结点没有左子树。F.•棵含有N个结点的完全二叉树,它的高度是LL0G2Nj+loG.在二叉树中插入结点,该二叉树便不再是二叉树。H.采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。I.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。J.用一维数组存储二叉树时,总是以前序周游存储结点。【山东工业大学1995三、(5分)】二、判断题1.二叉树是度为2的有序树。【长沙铁道学院1997—、3(1分)】【中科院软件所1997—、9(1分)】2.完全二叉树一定存在度为1的结点。【青岛大学2002一、4(1分】3.对于有N个结点的二叉树,其高度为logm。【上海海运学院1998一、6(1分】4.深度为K的二叉树中结点总数【南京航空航天大学1995五、1(1分】5.二叉树以后序遍历序列与前序遍历序列反映的同样的信息(他们反映的信息不独立)。【华南理工大学2002—、7(1分】6.二叉树的遍历结果不是唯一的.【南京理工大学1997二、8(2分】7.二叉树的遍历只是为了在应用中找到一种线性次序。【青岛大学2001四、4(1分)】8.树可用投影法进行中序遍历。【青岛大学2002一、6(1分】9.一个树的叶结点,在前序遍历和后序遍历下,皆以相同的相对位置出现。【上海海运学院1995一、4(1分】10.二叉树的前序遍历并不能唯一确定这棵树,但是,如果我们还知道该树的根结点是那一个,则可以确定这棵二叉树。【上海海运学院1995一、6(1分】11.一棵•般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。【上海海运学院19966(1分】12.对一棵二叉树进行层次遍历时,应借助于一个栈。【南京航空航天大学1995五、3(1分】13.用树的前序遍历和中序遍历可以导出树的后序遍历。【北京邮电大学1999二、3(2分】14.采用二叉链表作存储结构,树的前序遍历和其相应的二叉树的前序遍历的结果是一样的。【北京邮电大学2000—、2(1分]15.用一维数组存储二叉树时,总是以前序遍历顺序存储结点。【上海海运学院1995一、8(1分】16.中序遍历二叉链存储的二叉树时,一般要用堆栈;中序遍历检索二叉树时,也必须使用堆栈。【上海海运学院19987(1分】17.中序遍历一棵二叉排序树的结点就可得到排好序的结点序列【中科院软件所1999六、1-1(2分】18.后序线索二叉树是不完善的,要对它进行遍历,还需要使用栈。【长沙铁道学院1998一、2(1分)】19.任何二叉树的后序线索树进行后序遍历时都必须用栈。【西安交通大学1996-,2(3分)】20.任何一棵二叉树都可以不用栈实现前序线索树的前序遍历。【西安交通大学1996二、1(3分)】21.由一棵二叉树的前序序列和后序序列可以唯一确定它。【中科院软件所1997一、3(1分】22.完全二叉树中,若一个结点没有左孩子,则它必是树叶。【东南大学2001一、1-8(1分)】【中科院软件所19972(1分)】【山东大学2001一、4(1分)】23.二叉树只能用二叉链表表示。【南京理工大学1997二、6(2分】24.一棵有n个结点的二叉树,从上到下,从左到右用自然数依次给予编号,则编号为i 102的结点的左儿子的编号为2i(2i 103三、填空题1.二叉树由⑴,⑵,(3)三个基本单元组成。【燕山大学1998一、5(3分】2.树在计算机内的表示方式有(1),(2),⑶。【哈尔滨工业大学2000二、4(3分)】3.在二叉树中,指针p所指结点为叶子结点的条件是。【合肥工业大学1999三、7(2分]4.中缀式a+b*3+4*(c-d)对应的前缀式为(1),若a=l,b=2,c=3,d=4,则后缀式db/cc*a-b*+的运算结果为(2)。【西南交通大学2000一、6】5.二叉树中某一结点左子树的深度减去右子树的深度称为该结点的_。【燕山大学1998一、9(1分)】6.具有256个结点的完全二叉树的深度为。【燕山大学1998一、4(1分】7.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有个叶子结点。【厦门大学2000六、2(16%/3分】8.深度为k的完全二叉树至少有(1)个结点,至多有(2)个结点。【厦门大学2001—、4(14%/5分】【南京理工大学1999二、5(4分】9,深度为H的完全二叉树至少有(1)个结点:至多有(2)个结点:H和结点总数N之间的关系是(3)o【中科院计算所1998—、3(3分)1999二、4(3分)】【中国科技大学1998一、3(4分】10.在顺序存储的二叉树中,编号为i和j的两个结点处在同一层的条件是o【厦门大学2002六、3(4分】11.在完全二叉树中,编号为i和j的两个结点处于同一层的条件是o【合肥工业大学2000三、6(2分】12.一棵有n个结点的满二叉树有(1)个度为1的结点、有(2)个分支(非终端)结点和(3)个叶子,该满二叉树的深度为(4)。【华中理工大学2000一、6(3分)13.假设根结点的层数为1,具有n个结点的二叉树的最大高度是o【北方交通大学2001二、1】14.在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0=【北方交通大学2001二、6]【南京理工大学1999二、4(2分】15.设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为,最小结点数为。【北京大学1997一、1(4分】16.设有N个结点的完全二叉树顺序存放在向量A[1:N]中,其下标值最大的分支结点为[长沙铁道学院1997二、3(2分)】17.高度为K的完全二叉树至少有个叶子结点。【合肥工业大学1999二、6(2分】18.高度为8的完全二叉树至少有个叶子结点。【合肥工业大学2001三、6(2分】19.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是o【厦门大学2002六、4(4分】20.一个有2001个结点的完全二叉树的高度为。【南京理工大学1997三、2(1分】21.设F是由Tl,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知Tl,T2,T3的结点数分别为nl,n2和n3则二叉树B的左子树中有(1)个结点,右子树中有(2)个结点。【南京理工大学2000二、9(3分】22.一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是(1):编号是i的结点所在的层次号是⑵(根所在的层次号规定为1层)。【南京理工大学2001二、2(2分】23.如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为【南京理工大学2001二、3(2分】24.如果结点A有3个兄弟,而且B是A的双亲,则B的度是。【西安电子科技大学1999软件一、4(2分】 10422.高度为h的2-3树中叶子结点的数目至多为。【西安电子科技大学1999软件一、6(2分】26.完全二叉树中,结点个数为n,则编号最大的分支结点的编号为。【北京轻工业学院2000一、3(2分)】27.设一棵完全二叉树叶子结点数为k,最后一层结点数>2,则该二叉树的高度为。【北京科技大学1998一、3]28.对于••个具有n个结点的二元树,当它为一棵(1)二元树时具有最小高度,当它为一棵⑵时,具有最大高度。【哈尔滨工业大学2001・、3(2分)】29.MN个结点的二叉树,采用二叉链表存储,共有个空链域。【重庆大学2000一、8]30.8层完全二叉树至少有个结点,拥有100个结点的完全二叉树的最大层数为【西南交通大学2000一、1】31.含4个度为2的结点和5个叶子结点的二叉树,可有个度为1的结点。【北京工业大学2001一、6(2分)】32.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为。【山东大学2001三、2(2分)】33.n(n大于1)个结点的各棵树中,其深度最小的那棵树的深度是(1),它共有(2)个叶子结点和(3)个非叶子结点,其中深度最大的那棵树的深度是(4),它共有(5)个叶子结点和(6)个非叶子结点。【山东大学2001三、7(2分)】34.每一棵树都能唯一的转换为它所对应的二叉树。若已知一棵二叉树的前序序列是BEFCGDH,对称序列是FEBGCHD,则它的后序序列是(1)。设上述二叉树是由某棵树转换而成,则该树的先根次序序列是(2)。【山东工业大学1997二、(6分)】35.先根次序周游树林正好等同于按(1)周游对应的二叉树,后根次序周游树林正好等同于按(2)周游对应的二叉树。【山东工业大学1999二、1(4分】36.二叉树结点的对称序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E,则该二叉树结点的前序序列为,Q,则该二叉树对应的树林包括上1棵树。【北京大学1997一、2(4分】37.二叉树的先序序列和中序序列相同的条件是。【合肥工业大学2000三、7(2分】38.已知一棵二叉树的前序序列为abdecfhg,中序序列为dbeahfcg,则该二叉树的根为(1),左子树中有(2),右子树中有(3)。【南京理工大学1996二、1(6分】39.设二叉树中每个结点均用一个字母表示,若一个结点的左子树或右子树为空,用.表示,现前序遍历二叉树,访问的结点的序列为ABD.G...CE.H..F..,则中序遍历二叉树时,访问的结点序列为(1);后序遍历二叉树时,访问的结点序列为(2)。【南京理工大学1999二、3(4分】40.已知二叉树前序为ABDEGCF,中序为DBGEACF,则后序一定是。1青岛大学2000六、3(2分]41.现有按中序遍历二叉树的结果为abc,问有(1)种不同的二叉树可以得到这一遍历结果,这些二叉树分别是(2)。【中国矿业大学2000一、5(3分】42.一个无序序列可以通过构造一棵树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。【西安电子科技大学1999软件一、4(2分】43.利用树的孩子兄弟表示法存储,可以将一棵树转换为。【重庆大学2000一、9]44.若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的序列中的最后一个结点。【武汉大学2000一、2]45.先根次序周游树林正好等同于按周游对应的二叉树;后根次序周游树林正好等同于周游对应的二叉树。【山东大学1999二、1(4分)】46.在一棵存储结构为三叉链表的二叉树中,若有一个结点是它的双亲的左子女,且它的双亲有右子女,则这个结点在后序遍历中的后继结点是。【中国人民大学2001一、4(2分)】 10539.一棵左子树为空的二叉树在先序线索化后,其中的空链域的个数为:。【厦门大学2002六、1(4分】40.具有n个结点的满二叉树,其叶结点的个数是。【北京大学1994]41.设一棵后序线索树的高是50,结点x是树中的一个结点,其双亲是结点y,y的右子树高度是31,x是y的左孩子。则确定x的后继最多需经过中间结点(不含后继及x本身)【南京理工大学2000二、8(1.5分】42.线索二元树的左线索指向其,右线索指向其。【哈尔滨工业大学2000二、3(2分)】43.设y指向二叉线索树的一叶子,x指向一待插入结点,现x作为y的左孩子插入,树中标志域为Itag和rtag,并规定标志为1是线索,则下面的一段算法将x插入并修改相应的线索,试补充完整:(lchild,rchild分别代表左,右孩子)x.ltag:=(1):x.lchild:=(2):y*.ltag:=(3):y".lchild:=(4);x-.rtag:=(5):x*.rchild:=(6);IF(x'.IchildONIL)AND(x'lchild".rtag=l)THENx*.lchild~.rchiId:=(7);【南京理工大学1997三、7(9分】44.哈夫曼树是。【北京理工大学2001七、4(2)][长沙铁道学院1998二、3(2分)】45.若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是。【西安电子科技大学2001软件一、3(2分)】【厦门大学2002六、2(4分】46.有数据WG={7,19,2,6,32,3,21,10},则所建数ffman树的树高是(1),带权路径长度WPL为(2).【南京理工大学1999三、6(4分】47.有一份电文中共使用6个字符:24,(;,(1,6,1',它们的出现频率依次为2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度WPL为(1),字符c的编码是(2)。【中国矿业大学2000—、7(3分】48.设n。为哈夫曼树的叶子结点数目,则该哈夫曼树共有个结点。【西安电子科技大学1999软件一、2(2分】49.①二叉树用来表示表达式,因为需要保存各子树的值,修改二叉树的结点结构为(Lchild,Data,Vai,RchiId).其中Lchild,Rchild的意义同前,Vai用来存放以该结点为根的子树的值,值的类型依具体情况而定。为了简便起见,算法假定所考虑的表达式只有+,*,/四种二目运算,且已表示成相应的二叉树。算法所计算的表达式值放在根结点的Vai域中。PROCPostorder-eval(t:ptrType)BEGINIF(t!=NULL)BEGIN0);X2);CASEt.data::t\Vai:=t\Lchild二Vai+t\Rchild\Vai;BREAK;Vai:=t\Lchild\Vai-t二Rchild二Vai;BREAK;:Vai:=t\Lchild".Vai*t\Rchild二Vai;BREAK;t\Val:=t\Lchild.Vai/t\Rchild二Vai;BREAK;otherwise:(3);BREAK;ENDCASEENDEND;②PROCDelete(x:datatype,A:tree)BEGINtempA:=(4);WHILE(tempA\Item!=x)AND(tempA!=NULL)DOIF(x 106IF(6)return(x);IF(tempA\Lehild!=NULL)AND(tempA\rchild!=NULL)BEGINt:=tempA;q:=tempA.Rchild;WHILE(q*\LehiId!=NULL)DOBEGINt:=q;q:=q\Lchild;END;t\Lchild:=(7);〃删去qq.Lchild:=tempA\LehiId;Rchild:=tempA\Rchild;IF(tempA\item 107typedefstructnode{intdata;structnode*lchild,*rchild;}node;intN2,NL,NR,NO;voidcount(node*t){if(t->lchild!=NULL)if0)N2++;elseNL++;elseif⑵NR++;else⑶;if(t->lchild!=NULL)@;if(t->rchild!=NULL)®;}/*callform:if(t!=NULL)count(t);*/【上海大学2000一、3(10分)】39.下面是求二叉树高度的类PASCAL(注:编者略)及类C写的递归算法试补充完整[说明](1)考生可根据自己的情况任选一个做(都选不给分)(2)二叉树的两指针域为Ichild与rchild,算法中p为二叉树的根,lh和rh分别为以p为根的二叉树的左子树和右子树的高,hi为以p为根的二叉树的高,hi最后返回。height(p){if(0)){if(p->lchild=nul1)lh=(2);elselh=(3);if(p->rchi1d=nu11)rh=(4);elserh=(5);if(lh>rh)hi=(6):elsehi=(7);}elsehi=(8);returnhi;}//【南京理工大学1997三、8(15分】40.二叉树以链方式存储,有三个域,数据域data,左右孩子域Ichild,rchildo树根由tree指向。现要求按层次从上到下,同层次从左到右遍历树。下面算法中用到addx(p),将指针p进队,delx()将队头元素返回并退队,notempty在队不空时返回true,否则为false,将算法补充完整:PROCprocessnode(p);IF(1)THEN[write(p*.data);(2)]ENDP;PROCtrave(tree);write(tree-.data);(3);WHILEnotempty()DO[r:=delx();processnode(r*.1chi1d);processnode((4))]ENDP;【南京理工大学1999三、5(4分】63阅读下列程序说明和程序,填充程序中的【程序说明】本程序完成将二叉树中左、右孩子交换的操作。交换的结果如下所示(编者略)。本程序采用非递归的方法,设立一个堆栈stack存放还没有转换过的结点,它的栈顶指针为tpo交换左、右子树的算法为:(1)把根结点放入堆栈。(2)当堆栈不空时,取出栈顶元素,交换它的左、右子树,并把它的左、右子树分别入栈。(3)重复(2)直到堆栈为空时为止。typedefstructnode*tree;structnode{intdata;tree1child,rchild;}exchange(treet){treer,p;treestack[500];inttp=0;(1) 108while(tp>=0)(12)if(13)){r=p->lchild;p->lchild=p->rchiId;p->rchild=rstack[(4)]=p->lchild;stack[++tp]=p->rchild;}}}【中科院自动化研究所1994二、2(15分】64.下面使用类pascal语言写的对二叉树进行操作的算法,请仔细阅读TYPEpointer=tnodetp;tnodetp=RECORDdata:char;llink,rlink:pointer;END;1inkstacki1inknodet;1inknodet=RECORDdata:pointer;next;linkstack;END;PROCunknown(VARt:pointer);VARp,temp:pointer;BEGINp:=t;IFp<>NILTHEN[temp:=p.11ink;p.llink:=p\rlink;;p\rlink:=temp;unknown(p*.llink);unknown(p\rlink);]END;①指出该算法完成了什么功能②用栈将以上算法改为非递归算法unknownl,其中有若干语句或条件空缺请在空缺处填写上适当的语句或条件PROCinistack(VARs:linkstack); 109(1);s 110ext:=NIL;ENDP;FUNCempty(s:linkstack):boolean;IF(2)THENempty:=trueELSEempty:=false;ENDF;FUNCgettop(s:linkstack):pointer;gettop:=(3);ENDF;FUNCpop(VARs:1inkstack):pointer;VARp:1inkstack;pop:=s.next.data;p:=s.next;(A);(5)ENDF;PROCpush(VARs:linkstack;x:pointer);VARp:linkstack;new(p);p\data:=x;(6);s 111ext:=p;ENDP;PROCunknown1(VARt:pointer);VARp,temp:pointer;finish:boolean;BEGINinistack(s);finish:=false;p:=t;REPEATWHILEp<>NILDO[temp:=p\llink;p.llink:=p.rlink;p\rlink:=temp;(7);p:=p\llink;];IF(8)THEN[p:=gettop(s);temp;=pop(s);]ELSE(9)UNTIL(10)ENDP;【北方交通大学2000三、(25分)】64.具有n个结点的完全二叉树,已经顺序存储在一维数组中,下面算法是将A中顺序存储变为二叉链表存储的完全二叉树。请填入适当的语句在下面的上,完成上述算法。TYPEar=ARRAY[l..n]OFdatatype;pointer=RECORDdata:datatype;IchiId,rchiId:pointer;END;PROCEDUREbtree(VARa:ar;VARp:pointer);VARi:integer;PROCEDUREcreatetree(VARt:pointer;i:integer)BEGIN£1);t二data=a[i];IFX2)THENcreattree(X3))ELSEt\lchild:=NIL;IF^4)THENcreatetree((5))ELSE£rchiId:二NIL;END;BEGINj:=(6);createtree(p,j)END;【北京邮电大学1998五、(15分)】65.设一棵二叉树的结点定义为structBinTreeNode{ 112ElemTypedata;BinTreeNode*leftchild,*rightchild;}现采用输入广义表表示建立二叉树。具体规定如下:(1)树的根结点作为由子树构成的表的表名放在表的最前面;(2)每个结点的左子树和右子树用逗号隔开。若仅有右子树没有左子树,逗号不能省略。(3)在整个广义表输入的结尾加上一个特殊的符号(例如"#")表示输入结束。例如,对于如右图所示的二叉树,其广义表表示为A(B(D,E(G)),C(,F))o此算法的基本思路是:依次从保存广义表的字符串1s中输入每个字符。若遇到的是字母(假设以字母作为结点的值),则表示是结点的值,应为它建立一个新的结点,并把该结点作为左子女(当k=1)或右子女(当k=2)链接到其双亲结点上。若遇到的是左括号“(二则表明子表的开始,将k置为1;若遇到的是右括号“)”,则表明子表结束。若遇到的是逗号“,”,则表示以左子女为根的子树处理完毕,接着处理以右子女为根的子树,将K置为2。在算法中使用了一个栈s,在进入子表之前,将根结点指针进栈,以便括号内的子女链接之用。在子表处理结束时退栈。相关的栈操作如下:MakeEmpty(s)置空栈Push(s,p)元素p入栈Pop(s)退栈Top(s)存取栈顶元素的函数下面给出了建立二叉树的算法,其中有5个语句缺失,请阅读此算法并把缺失的语句补上。(每空3分)*&BT,charIs){Stack 113return(result);END;【华南师范大学2000年五、1(9分)】67.下列是先序遍历二叉树的非递归子程序,请阅读子程序(C语言与PASCAL语言过程功能完全相同,任选其一),填充空格,使其成为完整的算法。C语言函数:voidexample(b)btree*b;{btree*stack[20],*p;inttop;if(b!=null){top=1;stack[top]=b;while(top>0){p=stack[top];top―;printf("%d",p->data);if(p->rchild!=null)(0)_;⑵;)if(p->lchild!=null)(3)_;(4);}}}}PASCAL语言过程PROCEDUREexample(b:btree);VARstack:ARRAY[1..20]OFbtree;top:integer;p:btree;BEGINIFbONILTHENBEGINtop:=l;stack[top]:=b;WHILEtop>0DOBEGINp:=stack[top];top:=top-l;write(p.data);IFp\rchildONILTHENBEGIN(1);(2);END;IFp\IchildONILTHENBEGINU)_;4)_;ENDENDENDEND;【同济大学2001三、(10分)】68.下述是一个由二叉树的前序序列和中序序列构造该二叉树的算法,其中,数组A[l..n]存放前序序列,数组B[l..n]存放中序序列,s为根结点指针,i,j为树s的前序序列在A[l..n]中的开始位置和结束位置,x,y为树s的中序序列在中的开始位置和结束位置。所生成的二叉树采用二叉链表存储结构,其结点的形式为(Ichild,data,rchild)。请在算法的空框中填入适当语句,使其成为一个完整的算法。PROCEDUREcreatBT(i,j,x,y:integer;VARs:link);VARk,L:integer;BEGINs:=NIL;IF(1)THENBEGINnew(s);s\data:=a[i];k:=x;WHILE②DOk:=k+l;L:=(3);IFk=xTHENs\lchild:=NIL;ELSE(4);IFk=yTHENs二rchild:=NIL;ELSE®;ENDEND;【西安交通大学1996五、1(9分)】69.己知中序遍历bt所指二叉树算法如下,s为存储二叉树结点指针的工作栈,请在划线处填入一条所缺语句。PROCinorder(bt:bitreptr); 114inistack(s);(1);WHILENOTempty(s)DO[WHILEgettop(s)ONILDOpush(s,gettop(s)t.Ichild);_(2);IFNOTempty(s)THEN[visit(gettop(s));p:=pop(s);(3)]]ENDP;{inorder)【北京轻工业学院1999一、(9分)】67.以下程序是二叉链表树中序遍历的非递归算法,请填空使之完善。二叉树链表的结点类型的定义如下:typedefstructnode/*C语言/{chardata;structnode*1chiId,*rchild;}*bitree;voidvst(bitreebt)/*bt为根结点的指针*/{bitreep;p=bt;initstack(s);/*初始化栈s为空栈*/while(p|!!empty(s))/*栈s不为空*/if(p){push(s,p);⑴;}/*P入栈*/else{p=pop(s);printf(w%cM,p->data);(2);}/*栈顶元素出栈*/}【西南交通大学2000一、10]68.二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。intdepth(bitreebt)/*bt为根结点的指针*/{inthl,hr;if(bt==NULL)return(⑴);hl=depth(bt->lchild);hr=depth(bt->rchild);if(12))(3);return(hr+1);}【西南交通大学2000一、11]69.n个结点的完全二叉树存储在数组a中,下面为非递归的先序遍历算法。PROCpreorder(a);BEGINtop:=0;t:=1;WHILE(t<=n)OR(1)DOBEGINWHILEt<=nDOBEGINwrite(a[t]);top:=top+l;s[top]:=t;t:=⑵;END;IFtop>0THENBEGINt:=s[top]*2+l;top:=(3);END;END;END;【中山大学1998四、3(6分】70.后序遍历二叉树的非递归算法,bt是二叉树的根,S是一个栈,maxsize是栈的最大容量。TYPEbitreptr="bnodetp;bnodetp=RECORDdata:datatype;Ichild,rchild:bitreptrEND;TYPEstacktyp=REC0RDdata:ARRAY[1..maxsize]OFbitreptr;top:0..maxsize;END;PROCEDUREposterorder(bt:bitreptr);BEGINS.top:=0;p:=bt;REPEATWHILEpONILDOBEGINS.top:=S.top+1;IFS.top>maxsizeTHENstackfullELSEBEGINS.data[S.top]:=p;(1);ENDEND;IFS.data[S.top]\rchildONILTHEN@ELSEBEGINREPEATwrite(S.data[S.top]\data);S.top=S.top-1; 115UNTILS.top=0ORS.data[S.top]*.rchildOS.data[S.top+1];IFS.data[S.top]\rchildOS.data[S.top+1]THEN(3);END;UNTILa;END;【西北工业大学1999六、1(7分)】75.由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所缺的语句。#defineMAX100typedefstructNode{charinfo;structNode*llink,*rlink;}TNODE;charpred[MAX],inod[MAX];main(intargc,int**argv){TNODE*root;if(argc<3)exit0;strcpy(pred,argv[1]);strcpy(inod,argv[2]);root=restore(pred,inod,strlen(pred));postorder(root);)TNODE*restore(char*ppos,char*ipos,intn){TNODE*ptr;char*rpos;intk;if(n<=0)returnNULL;ptr->info=(l);for((2);rpos 116IF(3)THENBEGIN(4);stack[top]:=nd\left;ENDENDEND;【厦门大学2000三、1(8分】75.下面是中序线索树的遍历算法,树有头结点且由指针thr指向。树的结点有五个域,分别为数据域data,左、右孩子域lchild>rchild和左、右标志域Itag,rtago规定,标志域为1是线索,0是指向孩子的指针。inordethread(thr){p=thr->lchild;while((1)){while(②)p=13);printf(p->data);while((4)){p=(5);printf(p->data);}D=(6);}}【南京理工大学2000三、1(6分】76.下面的算法在中序线索树中找由指针所指结点的后继并由指针指向该后继结点,试补充完整(线索树的结点有五个域data,IchiId,rchild,左、右标志域1tag、rtag,并规定标志0指向孩子,1指向线索。PROCinorder_next(p);⑴;IFp".rtag=0THENWHILE(2)DOq:二⑶;return(q)ENDP;【南京理工大学1998三、1(6分】77.线索二叉树有数据域data,左右孩子域Ichild和rchiId,左右标志Itag及rtag,规定标志为1对应的孩子域是线索,0则为指向孩子的指针。规定在储存线索二叉树时,完成下面中序线索化过程。(存储线索二叉树,不增加头结点,只在原有的由tree指向的二叉树中增加线索,此处也不考虑c语言的具体语法与约定,线索化前所有的标志tag都是0)。/*pre是同tree类型相同的指针,初值是null*/thread_inorder(tree){if(tree!=null){threadinorder((1));if(tree->lchild==(2)){tree->ltag=l;tree->lchild=pre;}if(13)==null){(4);(5);)pre=p;thread-inorder((6));)}【南京理工大学2001三、5(6分】78.如下的算法分别是后序线索二叉树求给定结点node的前驱结点与后继结点的算法,请在算法空格处填上正确的语句。设线索二叉树的结点数据结构为(Iflag,left,data,right,rflag),其中:lflag=0,left指向其左孩子,lflag=1,left指向其前驱;rflag=0,right指向其右孩子,rflag=Lright指向其后继。prior(node,x){if(node!=null)if((1))*x=node->right:else*x=node->left;}next(bt,node,x)/*bt是二叉树的树根*/(12}; 117if(node!=bt&&node!=null)if(node->rflag)(3);else{dot=*x;^4);while(*x==node);*x=t;})【南京航空航天大学1996十、(8分)】四、应用题1.从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。【西安电子科技大学2001软件二、1(5分]2.树和二叉树之间有什么样的区别与联系?【西北工业大学1998—、3(4分)】【厦门大学2000五、2(14%/3分)】【燕山大学2001三、1(5分)】3.请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。【大连海事大学2001三(10分)】4.设有一棵算术表达式树,用什么方法可以对该树所表示的表达式求值?【中国人民大学2001二、3(4分】5.将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。【东北大学2000三、1(4分】6.一棵有n(n>0)个结点的d度树,若用多重链表表示,树中每个结点都有d个链域,则在表示该树的多重链表中有多少个空链域?为什么?【长沙铁道学院1998四、1(6分)】7.一棵二叉树中的结点的度或为0或为2,则二叉树的枝数为2(n0-l),其中n0是度为0的结点的个数。【南京理工大学1998六、(3分)】类似本题的另外叙述有:(1)若二叉树中度为1的结点数为0,则该二叉树的总分支数为2(nOT),其中n0为叶结点数。【西北工业大学1998三、1(5分】8.一个深度为L的满K叉树有以下性质:第L层上的结点都是叶子结点,其余各层上每个结点都有K棵非空子树,如果按层次顺序从1开始对全部结点进行编号,求:1)各层的结点的数目是多少?2)编号为n的结点的双亲结点(若存在)的编号是多少?3)编号为n的结点的第i个孩子结点(若存在)的编号是多少?4)编号为n的结点有右兄弟的条件是什么?如果有,其右兄弟的编号是多少?请给出计算和推导过程。【西北工业大学1999五(10分)】【中科院自动化所1996二、1(10分)】类似本题的另外叙述有:(1)一棵高度为h的满k叉树有如下性质:根据结点所在层次为0;第h层上的结点都是叶子结点;其余各层上每个结点都有k棵非空子树,如果按层次自顶向下,同一层自左向右,顺序从1开始对全部结点进行编号,试问:1)各层的结点个数是多少?(3分)2)编号为i的结点的双亲结点(若存在)的编号是多少?(3分)3)编号为i的结点的第m个孩子结点(若存在)的编号是多少?(3分)4)编号为i的结点有右兄弟的条件是什么?其右兄弟结点的编号是多少?(3分)【清华大学1999八(12分)】9.证明任一结点个数为n的二叉树的高度至少为O(logn).【浙江大学2000四、(5分)】10.有n个结点并且其高度为n的二叉树的数目是多少?【西安电子科技大学2000计应用一、3(5分)】11.已知完全二叉树的第七层有10个叶子结点,则整个二叉树的结点数最多是多少?【西安电子科技大学2000计应用一、4(5分】12.高度为10的二叉树,其结点最多可能为多少?【首都经贸大学1998一、1(4分】 1189.任意一个有n个结点的二叉树,已知它有m个叶子结点,试证明非叶子结点有(mT)个度为2,其余度为1。【西安电子科技大学2001计应用二、3(5分】10.已知A[1..N]是一棵顺序存储的完全二叉树,如何求出A[i]和A[j]的最近的共同祖先?【中国人民大学2001二、5(4分】11.给定K(K>=1),对一棵含有N个结点的K叉树(N>0)、请讨论其可能的最大高度和最小高度。【大连海事大学2001五、(8分)】12.已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个?【东北大学1999一、1(3分】13.一棵共有n个结点的树,其中所有分支结点的度均为K,求该树中叶子结点的个数。【东北大学2000一、3(4分】14.如在内存中存放一个完全二叉树,在树上只进行下面两个操作:(1)寻找某个结点双亲(2)寻找某个结点的儿子;请问应该用何种结构来存储该二叉树?【东北大学2001一、3(3分】15.求含有n个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结点的下标。要求写出简要步骤。【北京工业大学2000二、3(5分】16.设二叉树T中有n个顶点,其编号为1,2,3,…,n,若编号满足如下性质:(1)T中任一顶点v的编号等于左子树中最小编号减1;(2)对T中任一顶点v,其右子树中最小编号等于其左子树中的最大编号加1。试说明对二叉树中顶点编号的规则(按何种顺序编号)。【山东大学1992一、1(3分)】17.若一棵树中有度数为1至m的各种结点数为…,nKn.表示度数为m的结点个数)请推导出该树中共有多少个叶子结点n。的公式。【北京邮电大学1993二1(6分)】【西安交通大学1996四、1(5分)】【南京航空航天大学1998五(10分)】【东南大学1999一4(8分)】【山东大学1993—2(4分)】【山东师范大学2001二3(12分)2001二2(15分)】18.若一棵完全二叉树中叶子结点的个数为n,且最底层结点数叁2,则此二叉树的深度H=?【北京科技大学2001一、6(2分】19.已知完全二叉树有30个结点,则整个二叉树有多少个度为0的结点?【山东师范大学1996五、3(2分)】20.在一棵表示有序集S的二叉搜索树(binarysearchtree)中,任意一条从根到叶结点的路径将S分为3部分:在该路径左边结点中的元素组成的集合S1;在该路径上的结点中的元素组成的集合S2;在该路径右边结点中的元素组成的集合S3。S=SlUS2US3o若对于任意的aSSl,beS2,cGS3是否总有a〈b〈c?为什么?【清华大学2000四(10分)】【武汉大学2000三、3]21.试证明,在具有n(n>=l)个结点的m次树中,有n(m-l)+l个指针是空的。【复旦大学1998四(8分)】22.对于任何一棵非空的二叉树,假设叶子结点的个数为n„,而次数为2的结点个数为m,请给出n。和m之间所满足的关系式n°=f(m).要求给出推导过程。【复旦大学1998五(8分)】23.对于任意一棵非空的二叉树T,我们用n。表示T中叶子结点的个数,用m表示T中有两棵非空子树的结点的个数。(1)给出n0和m所满足的关系式。(2)证明你在(1)中给出的关系式成立。【复旦大学1997三(10分)】24.试求有n个叶结点的非满的完全二叉树的高度;【中科院计算所2000五、(5分)]29.对于具有n个叶子结点,且所有非叶子结点都有左右孩子的二叉树,(1)试问这种二叉树的结点总数是多少?(5分) 119(2)试证明金=lo其中:L表示第i个叶子结点所在的层号(设根结点所在层号为1).(10分)【北方交通大学1995三、(15分)】30.假设高度为H的二叉树上只有度为0和度为2的结点,问此类二叉树中的结点数可能达到的最大值和最小值各为多少?【北京邮电大学1996一、1(4分】31.一棵满k叉树,按层次遍历存储在一维数组中,试计算结点下标的u的结点的第i个孩子的下标以及结点下标为v的结点的父母结点的下标。【北京邮电大学2001四、4(5分】32.二叉树有n个顶点,编号为1,2,3,…,n,设:*T中任一顶点V的编号等于左子树中最小编号减1;*T中任一顶点V的右子树中的最小编号等于其左子树中的最大编号加1:试描绘该二叉树。【东南大学1999一、2(7分】33.设T是具有n个内结点的扩充二叉树,I是它的内路径长度,E是它的外路径长度。(1)试利用归纳法证明E=I+2n,n>=0.(5分)(2)利用(1)的结果试说明:成功查找的平均比较次数s与不成功查找的平均比较次数u之间的关系可用公式表示s=(l+l/n)uT,n>=l。【清华大学1998四、(10分)】34.一棵非空的有向树中恰有一个顶点入度为0,其它顶点入度为1,但一个恰有一个顶点入度为0,其它顶点入度为1的有向图却不一定是一棵有向树,请举例说明。【中科院计算所1999三、1(5分】35.试给出下列有关并查集(mfsets)的操作序列的运算结果:union(l,2),union(3,4),union(3,5),union(1,7),union(3,6),union(8,9),union(l,8),union(3,10),union(3,11),union(3,12),union(3,13),union(14,15),union(16,0),union(14,16),union(1,3),union(l,14).(union是合并运算,在以前的书中命名为merge)要求(1)对于union(i,j),以i作为j的双亲;(5分)(2)按i和j为根的树的高度实现union(i,j),高度大者为高度小者的双亲;(5分)(3)按i和j为根的树的结点个数实现union(i,j),结点个数大者为结点个数小者的双亲(5分)【清华大学2001—、(15分)】36.证明:在任何一棵非空二叉树中有下面的等式成立:叶结点的个数=二度结点的个数+1【天津大学1999四】37.对于一个堆栈,若其入栈序列为1,2,3,…,n,不同的出入栈操作将产生不同的出栈序列。其出栈序列的个数正好等于结点个数为n的二叉树的个数,且与不同形态的二叉树一一对应。请简要叙述一种从堆栈输入(固定为1,2,3……n)/输出序列对应一种二叉树形态的方法,并以入栈序列1,2,3(即n=3)为例加以说明。【浙江大学1998年五、1(7分)】38.如果给出了一个二叉树结点的前序序列和对称序序列,能否构造出此二叉树?若能,请证明之。若不能,请给出反例。如果给出了一个二叉树结点的前序序列和后序序列,能否构造出此二叉树?若能,请证明之。若不能,请给出反例。【北京大学1998二、2(5分)】类似本题的另外叙述有:(1)二叉树的中序与后序序列能唯一地定义一棵二叉树吗?这里所指序列中的符号代表树结点中的标识符吗?二叉树的前序与后序序列能唯一地定义一棵二叉树吗?为什么?【东南大学1993—、4(8分】39.试证明:同一棵二叉树的所有叶子结点,在前序序列。对称序序列以及后序序列中都按相同的相对位置出现(即先后顺序相同),例如前序a皿,后序区a对称序凶二【山东工业大学1997 120七、(10分)】35.由二叉树的中序序列及前序序列能唯一的建立二叉树,试问中序序列及后序序列是否也能唯一的建立二叉树,不能则说明理由,若能对中序序列DBEAFGC和后序序列DEBGFCA构造二叉树。【南京理工大学1998四、(3分)】36.证明,由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。设一棵二叉树的前序序列为ABDGECFH,中序序列为:DGBEAFHC。试画出该二叉树。【浙江大学1996六、(8分)】类似本题的另外叙述有:(1)证明:由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。【长沙铁道学院1997五、2(10分)】(2)证明:由二叉树的中序遍历序列和后序遍历序列可唯一地确定出该二叉树。【华南理工大学2001一、3(4分)】(3)二叉树已知其中序扫描序列和后序扫描序列如何确定这一棵二叉树,并举例说明.【山东大学2001软件与理论二、1(4分】37.试证明:仅仅已知一棵二叉树的后序遍历序列和先序遍历序列,不能唯一地确定这棵二叉树。【大连海事大学2001九、(8分)】类似本题的另外叙述有:(1)由二叉树的前序遍历和后序遍历结果能否唯一确定一棵二叉树?解释你的论断。【西安电子科技大学2001计应用二、4(5分】(2)假定某二叉树的前序遍历序列为ABCDEFGHIJ,后序遍历序列为CEFDBJIHGA,据此两个 121序列能否唯一确定此二叉树?若不能,试画出两样具有同样上述遍历序列的二叉树.【武汉交通科技大学1996二8(3分】35.①试找出满足下列条件的二叉树I)先序序列与后序序列相同2)中序序列与后序序列相同3)先序序列与中序序列相同4)中序序列与层次遍历序列相同②已知一棵二叉树的中序序列和后序序列分别为DBEAFIHCG和DEBHIFGCA,画出这棵二叉树。【东北大学1999六、(4分)】类似本题的另外叙述有:(1)试画出在先根次序和中根次序下结点排列顺序皆相同的所有类型的二叉树形。试画出在先根次序和后根次序下结点排列顺序皆相同的所有类型的二叉树形。【吉林大学1995四、1,2(每题7分)】(2)找出所有的二叉树,其结点在下列两种遍历下恰好都有同样的遍历序列。1)先序遍历和中序遍历2)先序遍历和后序遍历【北京理工大学1999三(6分)】(3)找出所有的二叉树,其结点在下列两种遍历下,恰好都是以同样的顺序出现:1)前序遍历和中序遍历。2)前序遍历和后序遍历。【南京航空航天大学1995六(5分)】(4)试找出分别满足下列条件的所有二叉树。1)先序序列和中序序列相同2)中序序列和后序序列相同3)先序序列和后序序列相同【南京航空航天大学2001二(10分)】(5)找出所有满足下列条件的二叉树:1)它们在先序遍历和中序遍历时,得到的结点访问序列相同:2)它们在后序遍历和中序遍历时,得到的结点访问序列相同;3)它们在先序遍历和后序遍历时,得到的结点访问序列相同;【东南大学2000—、4(6分】36.将下列由三棵树组成的森林转换为二叉树。(只要求给出转换结果)I【南京航空航天大学1998一、(10分)】37.阅读下列说明和流程图,回答问题(1)和问题(2)o说明:流程图是用来实现中序遍历,二叉树存放在数组tree中,每个数组元素存放树中一个结点,每个 122无左子女有左子女结点的形式为(值,左指针,右指针),分别用tree[i].v,tree[i].1,tree[i].r来表示第i个结点的值,左指针,右指针,其中左,右指针的值为所指结点在数组中的下标,若指针的值为0,表示它指向空树,图中指针root用以指向二叉树的根结点。问题:(1)填充流程图中的①、②、③,使其按中序遍历二叉树。(2)把流程图中的(A)框移至哪个位置(图中I〜IX)使流程图的算法从中序遍历变成后序遍历。【上海海运学院1997年四(13分】35.设一棵二叉树的先序、中序遍历序列分别为先序遍历序列:ABDFCEGH中序遍历序列:BFDAGEHC(1)画出这棵二叉树。(2)画出这棵二叉树的后序线索树。(3)将这棵二叉树转换成对应的树(或森林)。【南京航空航天大学1997二、(10分)】36.已知一棵二叉树的对称序和后序序列如下:对称序:GLDHBEIACJFK后序:LGHDIEBJKFCA(1)(2分)给出这棵二叉树:(2)(2分)转换为对应的森林:(3)(4分)画出该森林的带右链的先根次序表示法:’1V2Itag=i(4)(4分)画出该森林带度数的后根次序表示法:(5)(4分)在带度数的后根次序表示法中,不包含指针,但仍能完全反映树的结构。写出以结点x为根的子树在后根次序序列中的前驱的求法。(用语言叙述,不用写算法)【山东大学1998 123八(16分】35.设某二叉树的前序遍历序列为:ABCDEFGGI,中序遍历序列为:BCAEDGHFI: 124(1)试画出该二叉树;(2)写出由给定的二叉树的前序遍历序列和中序遍历序列构造出该二叉树的算法。(3)设具有四个结点的二叉树的前序遍历序列为abed;S为长度等于四的由a,b,c,d排列构成的字符序列,若任取S作为上述算法的中序遍历序列,试问是否一定能构造出相应的二叉树,为什么?试列出具有四个结点二叉树的全部形态及相应的中序遍历序列。【浙江大学1997六、(15分)】类似本题的另外叙述有:(1)已知二叉树的先序序列:CBHEGAF,中序序列:HBGEACF,试构造该二叉树【北京理工大学2001八、2(4分】(2)已知二叉树按中序排列为BFDAEGC,按前序排列为ABDFCEG,要求画出该二叉树。【山东师范大学1996五、1(2分)】(3)已知一棵二叉树的前序序列A,B,D,C,E,F,中序序列B,D,A,E,F,C.画出这棵二叉树。【燕山大学1999四、(5分)】(4)已知一棵二叉树的前序遍历结果是:ABCDEFGHIJ,中序遍历的结果是:BCEDAGHJIF,试画出这棵二叉树。【厦门大学1998六、1(7分)】(5)已知二叉树BT各结点的先序、中序遍历序列分别为ABCDEGF和CBAEDF,试画出该二叉树。【北京工业大学1998二、(6分)】35.假设一棵二叉树的前序序列为ABCD,它的中序序列可能是DABC吗?【石油大学1998—>1(5分)】类似本题的另外叙述有:(1)一棵前序序列为1,2,3,4,的二叉树,其中序序列可能是4,1,2,3吗?设一棵二叉树的前序序列为1,2,3,4,5,6,7,8,9,其中序序列为2,3,1,5,4,7,8,6,9,试画出该二叉树。【东南大学1996—,2(7分)1998—、3]50.一棵非空的二叉树其先序序列和后序序列正好相反,画出这棵二叉树的形状。【西安电子科技大学2000软件一、8(5分】51.已知一棵二叉树的后序遍历序列为EICBGAHDF,同时知道该二叉树的中序遍历序列为CEIFGBADH,试画出该二叉树。【重庆大学2000二、2]类似本题的另外叙述有:(1)己知二叉树BT各结点的中序和后序序列分别为DFBACEG和FDBGECA,试构造出该二叉树BT,并作简要说明。【北方交通大学1997二、(8分)】(2)已知二叉树的中序遍历序列为GFBEANHM,后序遍历的结点序列为GEBFHNMA,画出此二叉树的形态。【青岛海洋大学1999一、5(5分)】(3)已知二叉树的后序序列为ABCDEFG和中序序列为ACBGEDF,构造出该二叉树。【福州大学1998三、1(6分)】(4)已知某二叉树的后序遍历和中序遍历如下,构造出该二叉树。后序遍历序列:GDBEIHFCA中序遍历序列:DGBAECHIF【厦门大学2000七、1(20%/3分)】(5)已知一个二分树的中序序列和后序序列如下:中序:ABCDEFGHIJ后序:ACDBHJIGFE试画出此二分树的结构。【首都经贸大学1998二、1(10分】52.假设一棵二叉树的层次序列为ABCDEFGHIJ,中序序列DBGEHJACIF。请画出这棵二叉树。【武汉大学2000三、1]【东南大学2000一、1(6分】类似本题的另外叙述有:(1)假设一棵二叉树的层次次序(按层次递增顺序排列,同一层次自左向右)为ABECFGDHI,中序序列为BCDAFEHIGo请画出该二叉树,并将其转换为对应的森林。【山东大学2001四、(6分)】53.已知一个森林的先序序列和后序序列如下,请构造出该森林。先序序列:ABCDEFGHIJKLMNO 125后序序列:CDEBFHIJGAMLONK【合肥工业大学2000四、1(5分】50.画出同时满足下列两条件的两棵不同的二叉树。(1)按先根序遍历二叉树顺序为ABCDEo(2)高度为5其对应的树(森林)的高度最大为4。【东北大学1997一、3(5分】51.用一维数组存放的一棵完全二叉树;ABCDEFGHIJKLo请写出后序遍历该二叉树的访问结点序列。【西安电子科技大学1999计应用一、6(5分】52.一棵二叉树的先序、中序、后序序列如下,其中一部分未标出,请构造出该二叉树。先序序列:__CDE_GHI_K中序序列:CB__FA_JKIG后序序列:一EFDB_JIH_A【厦门大学2002七、1(6分)】类似本题的另外叙述有:(1)一棵二叉树的先序、中序和后序序列分别如下,其中有一部分为显示出来。试求出空格处的内容,并画出该二叉树。先序序列:_B_F_ICEH_G中序序列:D_KFIA_EJC_后序序列:_K_FBHJ_G_A【西安电子科技大学2000计应用五、2(5分)】(2)已知一棵二叉树的先序中序和后序序列如下,其中空缺了部分,请画出该二叉树。先序:_BC_EFG_IJK_中序:CBED_GAJ_H_L后序:_E_FD_J_L_HA【合肥工业大学2001四、1(5分)】(3)已知含有8个结点的一棵二叉树,按先序、中序、后序进行遍历后,有些结点序号不清楚如下图示。要求构造出一棵符合条件的二叉树。先根序遍历_23_5_78中根序遍历3_41_786后根序遍历_42__651【东北大学1996—、3(5分】57.M又树的前序和后序遍历分别与由它转换成的二叉树的哪种遍历相对应?【中国人民大学2000—、2(4分】58.证明:在二叉树的三种遍历序列中,所有叶子结点间的先后关系都是相同的。要求每步论断都指出根据。【北京工业大学2001二、3(5分】59.下表中M、N分别是一棵二叉树中的两个结点,表中行号i=l,2,3,4分别表示四种M、N的相对关系,列号j=l,2,3分别表示在前序、中序、后序遍历中M,N之间的先后次序关系。要求在i,j所表示的关系能够发生的方格内打上对号。例如:如果你认为n是m的祖先,并且在中序遍历中n能比m先被访问,则在(3,2)格内打上对号先根遍历时n先被访问中根遍历时n先被访问后根遍历时n先被访问N在M的左边N在M的右边N是M的祖先N是M的子孙【南京理工大学2001四、(10分)】60.用一维数组存放的一棵完全二叉树如下图所示:ABCDEFGHIJKL写出后序遍历该二叉树时访问结点的顺序。【北京工业大学19964(6分】 12661.设树形T在后根次序下的结点排列和各结点相应的次数如下:后根次序:BDEFCGJKILHA次数:000030002024请画出T的树形结构图。【吉林大学2001一、2(4分】62.已知二叉树采用二叉链表方式存放,要求返回二叉树T的后序序列中的第一个结点的指针,是否可不用递归且不用栈来完成?请简述原因。【西北大学2001三6]63.对于二叉树T的两个结点nl和n2,我们应该选择树T结点的前序、中序和后序中哪两个序列来判断结点nl必定是结点n2的祖先,并给出判断的方法。不需证明判断方法的正确性。【复旦大学1999五(10分)】64.设二叉树的存储结构如下(每题5分,共15分)LIN00237580101INFJHFDBACEGIRLI邨0009400000其中,T为树根结点的指针,LLINK.RLINK分别指向结点的左右子女,INFO为其数据域,请完成下列各题:(1)画出二叉树T的逻辑结构.(2)写出按前序、中序和后序周游二叉树T得到的结点序列.(3)画出二叉树T的后序线索树。【山东工业大学1995六(15分】65.在二叉树的前序遍历和中序遍历的递归算法中,最后一个递归调用语句在调用时所保留的参数有什么作用?如何清除最后这个递归语句?【北京邮电大学1994三、(8分)】66.在二叉树的Llink-Rlink存储表示中,引入“线索”的好处是什么?【山东大学1999六、1(2分)】67.按下面要求解下图中二叉树的有关问题:(1)对此二叉树进行后序后继线索化;(2)将此二叉树变换为森林;(3)用后根序遍历该森林,;写出遍历后的结点序列。【北京邮电大学1996五、(10分)】类似本题的另外叙述有:(1)已知一棵二叉树的先序遍历序列为:AEFBGCDHIKJ,中序遍历序列为:EFAGBCHKIJD„试写出此二叉树的后序遍历序列,并用图画出它的后序线索二叉树。【同济大学2000・、(10分)】68.对下图所示二叉树分别按前序.中序、后序遍历,给出相应的结点序列,同时给二叉树加上中序线索。【青岛海洋大学1999年一、1(5分】(g 127第67题图61.假设一个二叉树的两种遍历如下:前序:ABFGCHDEIJLK中序:FGBHCDILJKEA(1)画出这棵二叉树以及它的中序线索树:(2)写出在中序线索树的情况下,找到结点N的前驱结点的算法INORDER-PRIOR(N,X)【上海海运学院1996四、(10分)】62.已知一棵二叉树的中序(或中根)遍历结点排列为DGBAECHIF,后序(或后根)遍历结点排列为GDBEIHFCA,(1)试画出该二叉树;(2)试画出该二叉树的中序穿线(或线索)树;(3)试画出该二叉树(自然)对应的森林:【吉林大学2000一、1(5分】63.设二叉树BT的存储结构如下:12345678910LehiId00237580101DataJHFDBACEGIRchild0009400000其中BT为树根结点的指针,其值为6,LehiId,Rchild分别为结点的左、右孩子指针域,data为结点的数据域。试完成下列各题:(1)画出二叉树BT的逻辑结构;(2)写出按前序、中序、后序遍历该二叉树所得到的结点序列;(3)画出二叉树的后序线索树。【中国矿业大学2000二、(15分)】64.请说明是否存在这样的二叉树,即它可以实现后序线索树进行后序遍历时不使用栈;而对前序线索树进行前序遍历时,又有什么样的二叉树可不使用栈。【西安电子科技大学1996二、1(5分】65.一棵左右子树均不空的二叉树在先序线索化后,其空指针域数为多少?【西安电子科技大学2000计应用一、2(5分】66.在前序线索树上,要找出结点p的直接后继结点,请写出相关涪句。结点结构为(Itag,1c,data,rtag,re)»【西北大学2000二、6(5分】67.对于后序线索二叉树,怎样查找任意结点的直接后继:对于中序线索二叉树,怎样查找任意结点的直接前驱?【西北工业大学1998一、4(4分】76.将下列树的孩子一兄弟链表改为后根遍历全线索链表。【清华大学1994二、(10分)】DataABcDEFGHIJKLtag00000000000Fch205780110000Rtag00000000000Nsib03406009100077.已知一棵二叉树的前序遍历为ABECDFGHIJ,中序遍历为EBCDAFHIGJ。试画出这棵树和它的中序线索树。假定用于通讯的电文仅有8个字母Cl,C2,…,C8组成,各个字母在电文中出现的频率分别为5,25,3,6,10,11,36,4,试为这8个字母设计哈夫曼编码树。【上海海运学院1998四(10分)】78.设有正文AADBAACACCDACACAAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。【首都经贸大学1997一、5(4分)】类似本题的另外叙述有:(1)设有正文MN0PPP0PMMP0P0PP0PNP,字符集为M,N,0,P,设计一套二进制 128编码,使得上述正文的编码最短。【首都经贸大学1998一、5(4分】77.给定集合{15,3,14,2,6,9,16,17}(1)(3分)用口表示外部结点,用。表示内部结点,构造相应的huffman树:(2)(2分)计算它的带权路径长度:(3)(3分)写出它的huffman编码:(4)(3分)huffman编码常用来译码,请用语言叙述写出其译码的过程。【山东大学1998七、】【山东工业大学2000七、(11分)】类似本题的另外叙述有:(1)如果通信字符a,b,c,d出现频度分别为:7,5,2,4请画出哈夫曼树并给出相应的哈夫曼编码。【青岛大学2001七、1(5分)】(2)给定一组数列(15,8,10,21,6,19,3)分别代表字符A,B,C,D,E,F,G出现的频度,试叙述建立哈夫曼树的算法思想,画出哈夫曼树,给出各字符的编码值,并说明这种编码的优点。【青岛大学2000七、(10分)】(3)设通信中出现5中字符A、B、C、D、E对应的频率为0.2,0.1,0.5,0.15,0.25构造哈夫曼树,并给出对应字符的编码。【青岛大学2002四、2(10分】(4)设A、B、C、D、E、F六个字母出现的概率分别为7,19,2,6,32,3。试写出为这六个字母设计的HUFFMAN编码,并画出对应的HUFFMAN树.【山东工业大学1995四(10分)】(5)设用于通信的电文由8个字母组成,字母在电文中出现的频率分别为:7,19,2,6,32,3,21,10。试为这8个字母设计哈夫曼编码.使用0-7的二进制表示形式是另一种编码方案,试比较这两种方案的优缺点。【南京航空航天大学1999四、(10分)】(6)假设用于通讯的电文由8个字符组成,其出现的频率为5,29,7,8,14,23,3,11。试为这8个字符设计哈夫曼编码。【燕山大学1999五、(5分)](7)假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,,0.20,0.04},1)为这7个字母设计哈夫曼编码;2)对这7个字母进行等长编码,至少需要几位二进制数?哈夫曼编码比等长编码使电文总长压缩多少?【北京邮电大学2001四、2(5分)】(8)试构造一棵二叉树,包含权为1,4,9,16,25,36,49,64,81,100等10个终端结点,且具有最小的加权路径长度WPL【北方交通大学1993年五(12分)】(9)带权结点为{5,6,7,8,9},构造Huffman树,计算带权路径长度。【西北大学2001年三、31(10)以数据集{2,5,7,9,13}为权值构造一棵哈夫曼树,并计算其带权路径长度。【西安电子科技大学1999计应用一、4(5分】(11)假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为 1297,19,2,6,32,3,21,10,试为这8个字母设计哈夫曼编码。使用0s7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。【大连海事大学1996五、2(8分)].(12)设用于通讯的电文仅由8个字母组成,他们在电文中出现的频率分别为0.30,0.07,0.10,0.03,0.20,0.06,0.22,0.02,试设计哈夫曼树及其编码。使用0—7的二进制表示形式是另一种编码方案。给出两种编码的对照表、带权路径长度WPL值并比较两种方案的优缺点。【厦门大学1999三、3](13)给定一组权值2,3,5,7,11,13,17,19,23,29,31,37,41,试画出用Huffman算法建造的Huffman树。【吉林大学2000一、2(4分)】(14)以数据集{3,4,5,8,12,18,20,30}为叶结点,构造一棵哈夫曼树,并求其带权路径长度。【山东师范大学1996五5(2分)】77.给定权W1,W2,…,Wm。说明怎样来构造一个具有最小的加权路径长度的k叉树。试对于权1,4,9,16,25,36,49,64,81,100来构造最优的三叉树,并给出其最小加权路径长度。【北方交通大学1994年四(12分】78.已知下列字符A、B、C、D、E、F、G的权值分别为3、12>7、4,2、8,11,试填写出其对应哈夫曼树HT的存储结构的初态和终态。【北京工业大学1998五、(10分)】79.什么是前缀编码?举例说明如何利用二叉树来设计二进制的前缀编码。【中山大学1999三、1(3分)】80.如果一棵huffman树T有n。个叶子结点,那么,树T有多少个结点,要求给出求解过程。【复旦大学1999四、(10分)】81.设T是一棵二叉树,除叶子结点外,其它结点的度数皆为2,若T中有6个叶结点,试问:(1)T树的最大深度Kmax=?最小可能深度Kmin=?(2)T树中共有多少非叶结点?(3)若叶结点的权值分别为1,2,3,4,5,6。请构造一棵哈曼夫树,并计算该哈曼夫树的带权路径长度wpl。【北京邮电大学1992一、3]85.对如下算法,解答下列问题。PROCEDUREinorder(T:bitree);BEGINtop:=l;s[top]:=T;REPEATWHILEs[top]ONILDOBEGINs[top+l]:=s[top]*.Ichild;top:=top+l;END;IFtop>lTHENBEGINtop:=top-l;WRITE(s[top]data);s[top]:=s[top]*.rchild;END;UNTILtop=0END;(1)该算法正确吗?循环结束条件top=0能否满足?(2)若将IFtop>l…改为IFtop>0…是否正确?(3)若将结束条件改为top=l,其它不变,是否正确?(4)若仅将结束处条件改为(top=l)AND(s[top]=NIL),是否正确?(5)试找出二叉树中各结点在栈中所处层次的规律。【西安电子科技大学2000计应用三(10分)】五、算法设计题1.假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树BT中,写出计算该算术表达式值的算法。【东北大学2000三、2(10分】2.给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号。【北京邮电大学2001五、3(10分】3.(此题统考生做)用PASCAL语言(或类PASCAL语言)完成下列各题:(1)设表达式a+b*(c-d)-e/f可以表示成如下二叉树结构:△ 130其中t为根结点指针,试运用后序遍历二叉树的规则,写出对表达式求值的算法:EXPVALUE【北京科技大学1998年八、1(10分】4.编程求以孩子一兄弟表示法存储的森林的叶子结点数。要求描述结构。【北京工业大学2000五(10分)】5.假定用两个一维数组L[N]和R[N]作为有N个结点1,2,…,N的二元树的存储结构。L[i]和R[i]分别指示结点i的左儿子和右儿子;L[i]=0(R[i]=O)表示i的左(右)儿子为空。试写一个算法,由L和R建立一个一维数组T[n],使T[i]存放结点i的父亲;然后再写一个判别结点U是否为结点V的后代的算法。【哈尔滨工业大学1999七(14分)】类似本题的另外叙述有:(1)假定用两个一维数组和作为有n个结点的二叉树的存储结构,L[i]和R[i]分别指示结点i的左孩子和右孩子,0表示空。写一算法,建立一维数组T[l..n],使T中第i(i=l,2,...,n)个分量指示结点i的双亲,然后判别结点u是否为v的子孙的算法。【华南师范大学2000六(17分)】6.要求二叉树按二叉链表形式存储,(1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。完全二叉树定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二叉树中编号从1至N的结点一一对应。此题以此定义为准。【西北大学2000六(12分)】类似本题的另外叙述有:(1)试写一算法判断某二叉树是否是完全二叉树。【青岛海洋大学1999六(15分)】(2)编程,判断一棵二叉链表表示的二叉树是否是完全二叉树。【南京航空航天大学2001十(10分)】(3)编写算法判断一棵二叉树BT是否是完全二叉树。【北方交通大学1997八(20分)】(4)假设二元树用左右链表示,试编写一算法,判别给定二元树是否为完全二元树?【哈尔滨工业大学2000十一(14分)】 131(5)设二叉树以二叉链表为存储结构,试给出判断一棵二叉树是否为满二叉树的算法,用类pascal语言写为函数形式。【南开大学1997四(16分)】(6)试写一算法判别某二叉树是否是完全二叉树。【北京邮电大学1994九(20分)】4.有n个结点的完全二叉树存放在一维数组A[Ln]中,试据此建立一棵用二叉链表表示的二叉树,根由me指向。【南京理工大学1998七、1(6分】5.设任意非空二叉树中结点按层次顺序依次编号为1,2,…,n(n>0),其存储结构采用下图所示形式,其中i表示结点的编号,L(i)的值是i的左儿子的编号,R(i)的值是i的右儿子的编号。若L(i),R(i)的值为0,表示结点i无左儿子或右儿子。试设计算法:1232O435O4OO5O66OOiL 132bnode=REC0RDdata:datatype;Ich,rch:btreEND;【北京轻工业学院1997一(15分)X南京航空航天大学1997十(10)X北京理工大学2000四3(4)】 1334.二叉树采用二叉链表存储:(1)编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。(2)编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。【西北大学2001四】5.以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度。【北方交通大学1999五(18分)】类似本题的另外叙述有:(1)设T是一棵n元树,Tb是T的孩子兄弟表示(二叉链表)的二叉树,试编程,由Tb计算T的高度(要求用非递归方法实现)。【南京航空航天大学2000九】6.设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,P和q分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(ROOT,P.q,r),该算法找到p和q的最近共同祖先结点r。【吉林大学2000二、3(12分】即山大学1994六(15分】7.已知一棵二叉树按顺序方式存储在数组中。设计算法,求出下标分别为i和j的两个结点的最近的公共祖先结点的值。【武汉大学2000五1]8.设计这样的二叉树,用它可以表示父子、夫妻和兄弟三种关系,并编写一个查找任意父亲结点的所有儿子的过程。【燕山大学2001四、5(8分】9.在二叉树中查找值为x的结点,试编写算法(用C语言)打印值为x的结点的所有祖先,假设值为x的结点不多于一个,最后试分析该算法的时间复杂度(若不加分析,直接写出结果,按零分算)。【上海交通大学1998五】类似本题的另外叙述有:(1)在二叉树中查找值为x的结点,请编写一算法用以打印值为x的结点的所有祖先,假设值为x的结点不多于1个。注;采用非递归算法。【西安电子科技大学1996六(10分)](2)设二叉树中结点的数据域的值互不相同,试设计一个算法将数据域值为x的结点的所有祖先结点的数据域打印出来。【北方交通大学1996八(20分)】(3)设二叉树根指针为t,且树中结点值各不相同,写出算法disp_f(t,x),查找树中值三、4(20分)】栈为t的结点,并显示出其所有祖先结点的值。【首都经贸大学1998(4)若一棵二叉树中没有数据域值相同的结点,设计算法打印数据域值为x的所有祖先结点的数据域。如果根结点的数据域值为x或不存在数据域值为x的结点,则什么也不打Eh例如右图所示的二叉树,则打印结点序列为A、C、E。【北京工业大学1995五、(16分)】10.利用栈的基本操作写出先序遍历二叉树的非递归算法要求进栈的元素最少,并指出下列(最右图18(4)题图的元素。【山东科技大学2002四、(10分)】19题图11.设一棵完全二叉树使用顺序存储在数组bt[l..n]中,请写出进行非递归的前序遍历算法。【西安电子科技大学1998四(8分)】12.若二叉树用以下存储结构表示,试给出求前序遍历的算法:TYPETree:=ARRAY[1..max]OFRECORDdata:char;parent:integer;END;下标123456 134数据父母【北京邮电大学2002五、4(15分】4.设计算法返回二叉树T的先序序列的最后一个结点的指针,要求采用非递归形式,且不许用栈。【合肥工业大学1999五、2(8分】5.已知一棵高度为K具有n个结点的二叉树,按顺序方式存储:(1)编写用先根遍历树中每个结点的递归算法;(2)编写将树中最大序号叶子结点的祖先结点全部打印输出的算法。【东北大学1997六(20分)]□6.对于二叉树的链接实现,完成非递归的中序遍历过程。【中山大学1999五、(15类似本题的另外叙述有:(1)写出中序遍历二叉树的非递归算法及递推算法。【大连海事大学1996六、2(10分(2)设计一个中序遍历算法,应用栈来存储树结点,要求结点仅能进栈和出栈一次。(本题指中序遍历二叉树)【西安电子科技大学1999计应用四(10分)】(3)用非递归方式写出二叉树中序遍历算法。【山东科技大学2002六、2(9分)】7.已知二叉树用下面的顺序存储结构,写出中序遍历该二叉树的算法。TYPEARRAY[L.maxn]OFRECORDdata:char;〃存储结点值Lc,Rc;integer;END;〃存左孩子右孩子的下标,0表示无左、右孩子。123456789dataABCDEFGHILc240008000Rc356079000如树T=A(B(D,E,(#,G)),C(#,F(H,I)))存储如上图。【北京邮电大学1999九(10分)】8.试给出二叉树的自下而上、自右而左的层次遍历算法。【吉林大学2001二、2(89.在一棵以二叉链表表示的二叉树上,试写出用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目的算法。二叉链表的类型定义为:TYPEbitreptr="bnodetp;bnodetp二RECORDdata:char;Ichild,rchild:bitreptrEND;【同济大学2000三、2(12分】类似本题的另外叙述有:(1)请设计算法按层次顺序遍历二叉树。【北方交通大学2001四、(20分)】(2)试以二叉链表作存储结构,编写按层次顺序遍历二叉树的算法。【上海交通大学1999三(12分)】(3)己知一棵以二叉链表作存储结构的二叉树,编写按层次顺序(同一层自左至右)遍历二叉树的算法。【燕山大学1999十、1(8分)】(4)设二叉树用二叉链表存储,试编写按层输出二叉树结点的算法。【北京理工大学2001九、2(8分)】(5)写出按层次顺序打印任意二叉树T中结点的程序。二叉树采用双链结构,结点形式为(LSON,DATA,RSON)可采用任何你熟识的算法语言,设T指向二叉树的根结点。【山东大学1993二(12分)】10.设一棵二叉树以二叉链表为存贮结构,结点结构为(Ichild,data,rchild),设计一个算法将二叉树中所有结点的左,右子树相互交换。【福州大学1998四、2(10分)】 135类似本题的另外叙述有:(1)设t为一棵二叉树的根结点地址指针,试设计一个非递归的算法完成把二叉树中每个结点的左右孩子位置交换。【东北大学1996五、(14分)】(2)写一个将二叉树中每个结点的左右孩子交换的算法。(统考生做)【南京航空航天大学1999九(10分)】4.设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后序遍历序列的递归算法。【东北大学2001三(15分)】5.已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法。【东北大学1999六、3(12分】6.设二叉树采用二叉链表作为存储结构。试用类PASCAL语言实现按前序遍历顺序输出二叉树中结点的非递归算法。要求定义所用结构。设栈已经定义:inits(S),empty(S)push(S,P),pop(S),top(S)分别为栈初始化,判栈空,入栈,出栈,看栈顶等操作。【北京工业大学1997二、1(10分】7.已知深度为h的二叉树以一维数组BT(1:T-1)作为其存储结构。请写一算法,求该二叉树中叶结点的个数。【北京航空航天大学1996]8.设某二叉树结点结构为:TYPEbitreptr="bnodetp;bnodetp二RECORDdata:integer;Ichild,rchild:bitreptrEND;试编写算法,计算每层中结点data域数值大于50的结点个数,并输出这些结点的data域的数值和序号。E【北京工业大学1998九(10分)[[\9.编写递归程序将二叉树逆时针旋转90R驾印度打印出来。如右图:(要求用类PASCAL语言,/\口并描述结构)。EAD【北京工业大学1999二、(6分)】10.二叉树排序方法如下:(1)将第一个数据放在树根。(2)将随后读入的数据与树根中的数据相比较,若比树根大,则置于右子树,反之则置于左子树,建成一棵二叉树;(3)利用中序遍历打印排序结果。试用PASCAL或C语言编写二叉树的排序程序,并分析其算法复杂性。【浙江大学1995九(15分)】11.已知一二叉树中结点的左右孩子为left和right,p指向二叉树的某一结点。请用C或PASCAL编一个非递归函数postfirst(p),求p所对应子树的第一个后序遍历结点。【浙江大学1998六(10分)]12.已知二叉树T的结点在先根次序下的排列为A[l],A[2],A[n],在中根次序下的排列为B[l],B[2],B[n],其中,A和B是一维数组,数组元素的值为T中相应的结点的INFO字段的值,并假定二叉树T中结点的INFO字段的值互不相同,n>=0。试解答: 136(1)证明由A[l:n]和B[l:n]能唯一的确定二叉树T的结构;(2)给出建造二叉树T的算法,要求所建造的二叉树以LLINK/RLINK链接结构表示,且该算法是非递归算法;(3)分析你所给算法的时间复杂性,该过程包括如何确定基本运算如何推导出期望复杂性和最坏复杂性。【吉林大学1997四(20分)1998二】38.已知一具有n个结点的二叉树的中序遍历序列与后序遍历序列分别存放于数组IN[1:n]和POST[1:n]中,(设该二叉树各结点的数据值均不相同)。请写一建立该二叉树的二叉链表结构的非递归算法。该二叉链表的链结点结构为(Ichild,data,rchild),其中data为数据域,Ichild与rhild分别为指向该结点左、右孩子的指针域(当孩子结点不存在时,相应指针域为空,用nil表示)。【北京航空航天大学1998六(15分)】39.试写出复制一棵二叉树的算法。二叉树采用标准链接结构。【山东大学2000二(10分)lo类似本题的另外叙述有:(1)已知二叉树T,试写出复制该二叉树的算法(t-T)(1)(8分)递归算法(2)(12分)非递归算法【北方交通大学1993七(20分)】(2)算法题(共20分,每题10分)(1)试写出-递归函数,判别两棵树是否相等。(2)试写出一递归函数,复制一棵二叉树。【山东工业大学1997八、(20分)】40.假设一维数组H[l:n]存放森林F的每个结点的地址,且序列H[l],H[2],…,H[n]正好是森林F在先根次序下结点地址的排列;E[l:n]是一维数组,且当l<=i<=n时,E[i]是H[i]所指结点的次数(即儿子结点的个数)。试给出一个算法,该算法计算森林F的树形个数,并计算森林F的最后一个树形的根结点地址。【吉林大学1995五(15分)】41.请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表指针。分析你的算法的时、空复杂度。【华南师范大学1999六、2(13分】类似本题的另外叙述有:(1)已知二叉树的链表存储结构定义如下:TYPEbitreptr=bitrenode;bitrenode=RECORDdata:char;Ichild,rchiId:bitreptrEND;编写一个递归算法,利用叶结点中空的右链指针域rchild,将所有叶结点自左至右链接成一个单链表,算法返回最左叶结点的地址(链头)。【清华大学1997三、(10分)】42.设二叉树以二叉链表示。使用类PASCAL语言编一过程,输出二叉树中各结点的数据及其所在的层数(已知一棵二叉树按中序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点被访问的次序,是否唯一确定这棵二叉树的结构?为什么?若已知一棵二叉树按先序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点访问的次序,能否唯一确定期三叉D/J/GPOT:树的结构?为什么?)【南开大学1997四(15分)1998三(12分)】43.写一非递归遍历算法,使右图树遍历输出顺序为字母顺序。【中国人民大学2000三、1(10分】44.二叉树结点的平衡因子(bf)定义为该结点的左子树高度与右子树高度之差。设二叉树结点结构为:(Ichild,dat&bf,rchild),lchild,rchild是左右儿子指针;data是数据元素;bf是平衡因子,编写递归算法计算二叉树中各个结点的平衡因子。【石油大学1998四、(18分)】类似本题的另外叙述有:(1)设二叉树结点结构为(left,data,bf,right)。定义二叉树结点T的平衡因子bf(T)=hl-hr,写一递归算法确定二叉树tree中各结点的平衡因子bf,同时返回二叉树中非叶结点个数。【东南大学1996四(15分)]45.已知二叉树T采用二叉链表结构存储,每个结点有三个字段:data,Lchild和Rchild。设计算法求出T的顺序存储结构A[l..n], 137并给出初始调用形式。要求:如某位置为空,将其置为null;如超点出卜标范围n,则报错;最后返回实际的最大卜标.右图所不为n=15J时一个二叉树及所对应的输出结果示例(空缺表示null)。01)输出结果(表结构的值和最大下标):=12(最大下标为12)【合肥工业大学2001五、5(8分】123456789101112131415ABCDEFGHIJ38.设两棵二叉树的的根结点地址分别为p和q,采用二叉链表的形式存储这两棵树上所有的结点。请编写程序,判断它们是否相似。【上海交通大学2000十二(8分)】类似本题的另外叙述有:(1)编写一个函数或过程判定两棵二叉树是否相似,所谓两棵二叉树s和t相似,即是要么它们都为空或都只有一个结点,要么它们的左右子树都相似。【厦门大学2000四、1(9分)】(2)设计判断两棵二叉树是否相似的算法。【中国矿业大学2000四(10分)】39.编写递归算法,依据树的双亲表示法及其根结点创建树的孩子一兄弟链表存储结构。要求写算法以前先写出这两种存储结构的类型说明。【清华大学1995六(20分)】40.已知二叉树以二叉链表存储,编写算法完成:对于树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。【北京轻工业学院1998二(14分)】类似本题的另外叙述有:(1)设T是一棵给定的查找树,试编写一个在树中删除根结点为a的子树的程序,要求在删除的过程中释放该子树所有结点所占有的存储空间,这里假设树T中结点所占有的存储空间是通过动态存储分配取得的,其结点的形式为:(Ichild,data,rchild)【复旦大学1999七、(15分)]41.试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为x的结点,以及以它为根的子树,且释放相应存储空间。二叉树的三叉链表的描述为:TYPEbitreptr="nodetp;nodetp=REC0RDdata:char;1child,rchild,parent:bitreptrEND;VARbt:bitreptr;【同济大学1998四(14分)】42.设一棵二叉树的根结点指针为T,C为计数变量,初值为0,试写出对此二叉树中结点计数的算法:BTLC(T,C)。【北京科技大学1999十、2(10分)2000十、2(10)]43.试编写算法,对一棵以孩子一兄弟链表表示的树统计叶子的个数。【北京轻工业学院2000四(15分)】44.设计算法:统计一棵二叉树中所有叶结点的数目及非叶结点的数目。【南开大学2000三、1]45.用类PASCAL语言编写一非递归算法,求二叉树上叶子结点的数量。二叉树用二叉链表存贮,左指针定义为Ichild,右指针定义为rchild。【燕山大学2000七、2(8分】类似本题的另外叙述有:(1)用递归方法求已知二叉树的叶结点个数。【天津大学1999七】46.一棵二叉树以二叉链表来表示,求其指定的某一层k(k>l)上的叶子结点的个数。 138【上海大学1999三、1(18分)】38.二叉树采用二叉链表方式存放,对二叉树从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,请回答采用什么次序的遍历方式实现编号?并给出在二叉树中结点的数据域部分填写实现如上要求编号的非递归算法。【西北大学2001六】39.设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个一维数组pre[l..n]和mid[l..n]中,试遍写算法建立该二叉树的二叉链表南京航空航天大学1999十(10分)】类似本题的另外叙述有:(1)已知一棵二叉树的先序遍历序列和中序遍历序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。【上海交通大学1999四(12分)】(2)已知一棵二叉树的前序序列和中序序列分别存于两个一维数组PRE[l..n]和IN0[l..n]中,请编写算法来建立该二叉树的二叉链表。【西安电子科技大学1999软件三(8分)】(3)已知一棵二叉树的前序序列和中序序列,可唯一地确定该二叉树。试编写据此思想构造二叉树的算法。【北方交通大学1995七(20分)】40.已知二叉树的中序遍历序列为GFBEANHM,后序遍历的结点序列为GEBFHNMA。(1)画出此二叉树的形态。(2)写出根据二叉树的中序和后序遍历的结点序列,建立它的二叉链表存储结构的递归算法。【北京邮电大学1992四(20分)】41.假设二叉树采用链式存储结构进行存储,root”为根结点,p.为任一给定的结点,请写出求从根结点到P~之间路径的非递归算法。【西安电子科技大学2000软件三(9分)】42.设二叉树的结点具有如下的结构:(IchiId,info,rchild),指针变量BT指向该树的根结点,试设计一个算法打印出由根结点出发到达叶结点的所有路径。【北方交通大学1994八(16分)】【中国人民大学2000三、2(10分)】43.设二叉树的结点结构是(Lc,data,Rc),其中Lc、Rc分别为指向左、右子树根的指针,data是字符型数据。试写出算法,求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。【北京邮电大学1997A(20分)】44.设t是一棵按后序遍历方式构成的线索二叉树的根结点指针,试设计一个非递归的算法,把一个地址为x的新结点插到t树中,已知地址为y的结点右侧作为结点y的右孩子,并使插入后的二叉树仍为后序线索二叉树。【东北大学1996七(15分)】45.请用类C或用类PASCAL语言编写算法。请编写在中序全线索二叉树T中的结点P下插入一棵根为X的中序全线索二叉树的算法。如果P左右孩子都存在,则插入失败并返回FALSE;如果P没有左孩子,则X作为P的左孩子插入:否则X作为P的右孩子插入。插入完成后要求二叉树保持中序全线索并返回TRUE。【上海大学2002七、1(10分)】46.有中序穿索树T,结点形式为:(LL,LT,D,RT,RL),试编写非为归算法找到数据域为A的结点,并在其左子树中插入已知新结点X:插入方式如下:没插入前:插入后:J>/、第66题图注意:可能A有左孩子或无左孩子,插入后考虑穿索的状态应作何修改。【上海大学1998六(17分)】47.编写一算法,利用叶子结点中的空指针域将所有叶子结点链接为一个带有头结点的双链表,算法返回头结点的地址。【东北大学1999四(13分)】 13938.编写程序段,利用中序全线索树求其中任意结点p.的前序后继结点,结果仍用p指出。要求先描述结构和算法思路。设线索树不带头结点,其中序序列第一结点的左标志和最后结点的右标志皆为0(非线索),对应指针皆为空。【北京工业大学2000七(10分)】39.已知一个二叉树如下图,修改结点(node)的连接方式,以致可以不借助辅助堆栈实现中序遍历的非递归方法。画出修改后的结点连接图并写出其实现中序遍历的非递归算法。【浙江大学2002五(10分)】40.已知指针p指向带表头的中根次序穿线二叉树中的某结点,试写一算法FFA(p,q),该算法寻找结点P的父亲结点q。设穿线二叉树的结点结构、表头结点结构和空树结构分别为(LTAG,LLINK,INFO,RLINK,RTAG),且规定穿线树的最左下结点的LLINK域和最右下结点的RLINK域指向表头。【吉林大学1999二、1(16分】41.给出中序线索树的结点结构并画出一个具有头结点的中序线索树,使其树结点至少应有6个。写一算法在不使用栈和递归的情况下前序遍历一中序线索树,并分析其时间复杂性。【东南大学1993三(20分)1997三(18分)1998六(14分)】42.设有二叉树BT,每个结点包括Itag、Ichild,data、rchild,rtag五个字段,依次为左标志、左儿子、数据、右儿子、右标志。给出将二叉树BT建成前序(即先序)线索二叉树的递归算法。【四川联合大学2000三】【东南大学1999六(15分)]43.写出中序线索二叉树的线索化过程(已知二叉树T)。【山东大学2000五、2(10分)】【长沙铁道学院1997五、6(10分)】44.已知一中序线索二叉树,写一算法完成对它的中序扫描。【山东大学2001软件与理论三(8分)】45.已知中序线索二叉树T右子树不空。设计算法,将S所指的结点作为T的右子树中的一个叶子结点插入进去,并使之成为T的右子树的(中序序列)第一个结点(同时要修改相应的线索关系)。【合肥工业大学2001五、2(8分)】46.写出算法,求出中序线索二叉树中给定值为x的结点之后继结点,返回该后继结点的指针。线索树中结点结构为:(Itag,1c,data,rc,rtag)»其中,data存放结点的值;1c,rc为指向左、右孩子或该结点前驱或后继的指针;Itag,rtag为标志域,各值为:0,则1c,rc为指向左、右孩子的指针;值为1,则lc,rc为指向某前驱后继结点的指针。【北京邮电大学1996八(20分)】47.设后序线索树中结点构造为(Ltag,LehiId,Data,RchiId,Rtag)。其中:Ltag,Rtag值为0时,Lchild、RchiId分别为儿子指针;否则分别为直接前驱,直接后继的线索。请写出在后序线索树上找给定结点P'的直接前驱q的算法。【武汉交通科技大学1996四、1(13分】48.用算法说明在对称序穿线树中,如何对任意给定的结点直接找出该结点的对称序后继。【山东大学1999六、3(10分】49.写出在中序线索二叉树里;找指定结点在后序下的前驱结点的算法。【河海大学1998七(10分】50.设中序穿线二叉树的结点由五个域构成:info:给出结点的数据场之值。LL:当LT为1时,则给出该结点的左儿子之地址,当LT为0时,则给出按中序遍历的前驱结点的地址。LT:标志域,为1或为0。RL:当RT为1时,则给出该结点的右儿子的地址;当RT为0时,则给出按中序遍历的后继结点地址。RT:标志域为0或为1。请编写程序,在具有上述结点结构的中序穿线二叉树上,求某一结点p的按后序遍历次序的后继结点的地址q,设该中序穿线二叉树的根结点地址为ro另外,请注意必须满足;(1)额外空间的使用只能为0(1),(2)程序为非递归。【上海交通大学2000十(20分)】78.写出按后序序列遍历中序线索树的算法。【东南大学2000六(15分)】79.给定一组项及其权值,假定项都存放于二叉树的树叶结点,则具有最小带权外部路径长度的树称为huffman树。(1)给出构造huffman树的算法。(2)给定项及相应的权如下表:画出执行上述算法后得到的huffman树(3)用c语言编写构造huffman树的程序.【浙江大学2000七(18分)】序号123456789向ABCDEFGHI156712254611580、二叉树T的中序遍历序列和层次遍历序列分别是BAFDGCE和ABCDEFG,试画出该二叉树(3分), 140并写出由二叉树的中序遍历序列和层次遍历序列确定二叉树的算法(5分)。【烟台大学2004四、1(8分)】 141第七章图一、选择题1.图中有关路径的定义是()。【北方交通大学2001一、24(2分】A.由顶点和相邻顶点序偶构成的边所形成的序列B.由不同顶点所形成的序列C.由不同边所形成的序列D.上述定义都不是2.设无向图的顶点个数为n,则该图最多有()条边。A.n-1B.n(n-l)/2C.n(n+l)/2D.0E.n2【清华大学1998一、5(2分)】【西安电子科技大1998一、6(2分】【北京航空航天大学1999一、7(2分】3.一个n个顶点的连通无向图,其边的个数至少为()。【浙江大学1999四、4(4分)】A.n-lB.nC.n+1D.nlogn;4.要连通具有n个顶点的有向图,至少需要()条边。【北京航空航天大学2000一、6(2分]A.n-1B.nC.n+1D.2n5.n个结点的完全有向图含有边的数目()。【中山大学1998二、9(2分】A.n*nB.n(n+1)C.n/2D.n*(n—1)6.一个有n个结点的图,最少有()个连通分量,最多有()个连通分量。A.0B.1C.n-1D.n【北京邮电大学2000二、5(20/8分】7.在一个无向图中,所有顶点的度数之和等于所有边数()倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的()倍。【哈尔滨工业大学2001二、3(2分)】A.1/2B.2C.1D.48.用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为()。【中山大学1999—,14]A.5B.6C.8D.99.用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是()。A.逆拓扑有序B.拓扑有序C.无序的【中科院软件所1998]10.下面结构中最适于表示稀疏无向图的是(),适于表示稀疏有向图的是()。A.邻接矩阵B.逆邻接表C.邻接多重表D.十字链表E.邻接表【北京工业大学2001一、3(2分)】11.下列哪一种图的邻接矩阵是对称矩阵?()【北方交通大学2001一、11(2分】A.有向图B.无向图C.AOV网D.AOE网A=1O112.从邻接阵矩1。」可以看出,该图共有(①)个顶点;如果是有向图该图共有(②)条弧;如果是无向图,则共有(③)条边。【中科院软件所1999六、2(3分】①.A.9B.3C.6D.1E.以上答案均不正确②.A.5B.4C.3D.2E.以上答案均不正确③.A.5B.4C.3D.2E.以上答案均不正确 14211.当一个有N个顶点的图用邻接矩阵A表示时,顶点Vi的度是()。【南京理工大学1998一、4(2分】£4,,月2A[i,j]£心订£加,力之A[j,i]A.<=iB.i=lC.iD.<=i+j=i14.用相邻矩阵A表示图,判定任意两个顶点Vi和Vj之间是否有长度为m的路径相连,则只要检查()的第i行第j列的元素是否为零即可。【武汉大学2000二、7]A.mAB.AC.A-D.Am-115.下列说法不正确的是()。【青岛大学2002二、9(2分】A.图的遍历是从给定的源点出发每一个顶点仅被访问一次C.图的深度遍历不适用于有向图B.遍历的基本算法有两种:深度遍历和广度遍历D.图的深度遍历是一个递归过程16.无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是().【南京理工大学2001一、14(1.5分】A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f,dD.a,e,d,f,c,b17.设图如右所示,在下面的5个序列中,符合深度优先遍历的序列有多少?()【南京理工大学2000一、20(1.5分】aebdfcacfdebaedfcbaefdcbaefdb18.下图中给出由7个顶点组成的无向图。从顶点1出发,对它进行深度优先遍历得到的序列是(①),而进行广度优先遍历得到的顶点序列是(②)。【中科院软件所1999六、2-⑴(2分]①.A.1354267B.1347652C.1534276D.1247653E.以上答案均不正确②.A.1534267B.1726453C.1354276D.1247653E.以上答案均不正确19.下面哪一方法可以判断出一个有向图是否有环(回路):【东北大学20004、2(4分】A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径20.在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为().A.0(n)B.0(n+e)C.0(n2)D.O(n')【合肥工业大学2001一、2(2分】21.下面是求连通网的最小生成树的prim算法:集合VT,ET分别放顶点和边,初始为(1),下面步骤重复n-1次:a:(2);b:(3);最后:(4),【南京理工大学1997一、11」4(1).A.VT,ET为空B.VT为所有顶点,ET为空C.VT为网中任意一点,ET为空D.VT为空,ET为网中所有边(2).A.选i属于VT,j不属于VT,且(i,j)上的权最小B.选i属于VT,j不属于VT,且(i,j)上的权最大 143C.选i不属于VT,j不属于VT,且(i,j)上的权最小D.选i不属于VT,j不属于VT,且(i,j)上的权最大(1).A.顶点i加入VT,(i,j)加入ETB.顶点j加入VT,(i,j)加入ETC.顶点j加入VT,(i,_j)从ET中删去D.顶点i,j加入VT,(i,j)加入ET(2).A.ET中为最小生成树B.不在ET中的边构成最小生成树C.ET中有n-1条边时为生成树,否则无解D.ET中无回路时,为生成树,否则无解22.(1).求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义:(2).利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是0(/);(图用邻接矩阵表示)(3).Floyd求每对不同顶点对的算法中允许弧上的权为负,但不能有权和为负的回路。上面不正确的是()。【南京理工大学2000—、21(1.5分】A.(1),(2),(3)B.(1)C.(1),(3)D.(2),(3)23.当各边上的权值()时,BFS算法可用来解决单源最短路径问题。【中科院计算所2000一、3(2分)】A.均相等B.均互不相等C.不一定相等24.求解最短路径的Floyd算法的时间复杂度为()。【合肥工业大学1999一、2(2分】A.0(n)B.0(n+c)C.0(n*n)D.0(n*n*n)25.已知有向图G=(V,E),其中V={Vi,Vz,V3,V,,V3,V6,V7},E={ 144D.关键活动一定位于关键路径上32.下列关于AOE网的叙述中,不正确的是()。A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动提前完成,那么整个工程将会提前完成【北方交通大学1999一、7(3分)】【北京工业大学1999一、1(2分)】二、判断题1.树中的结点和图中的顶点就是指数据结构中的数据元素。()【青岛大学2001四、1(1分】2.在n个结点的无向图中,若边数大于n-1,则该图必是连通图。()【中科院软件所1997一、4(1分】♦£TD(yi)3.对有n个顶点的无向图,其边数e与各顶点度数间满足下列等式e=源.()【南京航空航天大学1996六、4(1分】4.有e条边的无向图,在邻接表中有e个结点。()【南京理工大学1998二、5(2分】5.有向图中顶点V的度等于其邻接矩阵中第V行中的1的个数。(”合肥工业大学2001二、7(1分】6.强连通图的各顶点间均可达。()【北京邮电大学2000一、3(1分】7.强连通分量是无向图的极大强连通子图。()【北京邮电大学2002一、7(1分】8.连通分量指的是有向图中的极大连通子图。()【燕山大学1998二、4(2分】9.邻接多重表是无向图和有向图的链式存储结构。()【南京航空航天大学1995五、5(1分】10.十字链表是无向图的一种存储结构。()【青岛大学2001四、7(1分)】11.无向图的邻接矩阵可用一维数组存储。()【青岛大学2000四、5(1分】12.用邻接矩阵法存储一个图所需的存储单元数目与图的边数有关。()【东南大学2001,、4(1分】【中山大学1994一、3(2分】13.有n个顶点的无向图,采用邻接矩阵表示,图中的边数等于邻接矩阵中非零元素之和的一半。()【北京邮电大学1998—、5(2分)】14.有向图的邻接矩阵是对称的。()【青岛大学2001四、6。分】15.无向图的邻接矩阵一定是对称矩阵,有向图的邻接矩阵一定是非对称矩阵。()【东南大学2001一、3(1分)】【哈尔滨工业大学1999三、4]16.邻接矩阵适用于有向图和无向图的存储,但不能存储带权的有向图和无向图,而只能使用邻接表存储形式来存储它。()【上海海运学院1995—、9(1分)1997—、8(1分)1998一、9(1分】17.用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小与图中结点个数有关,而与图的边数无关。()【上海海运学院1996一、8(1分)1999一、9(1分】18.一个有向图的邻接表和逆邻接表中结点的个数可能不等。()【上海交通大学1998一、12]19.需要借助于一个队列来实现DFS算法。()【南京航空航天大学1996六、8(1分】20.广度遍历生成树描述了从起点到各顶点的最短路径。()【合肥工业大学2001二、8(1分】 14521.任何无向图都存在生成树。()【北京邮电大学2000一、1(1分】22.不同的求最小生成树的方法最后得到的生成树是相同的.()【南京理工大学1998二、3(2分】23.带权无向图的最小生成树必是唯一的。()【南京航空航天大学1996六、7(1分】24.最小代价生成树是唯一的。()【山东大学2001一、5(1分】25.一个网(带权图)都有唯一的最小生成树。()【大连海事大学2001一、14(1分】26.连通图上各边权值均不相同,则该图的最小生成树是唯一的。()【哈尔滨工业大学1999三、3]27.带权的连通无向图的最小(代价)生成树(支撑树)是唯一的。()【中山大学1994一、10(2分】28.最小生成树的KRUSKAL算法是一种贪心法(GREEDY)。()【华南理工大学2002一、6(1分】29.求最小生成树的普里姆(Prim)算法中边上的权可正可负。()【南京理工大学1998二、2(2分】30.带权的连通无向图的最小代价生成树是唯一的。()【东南大学2001一、5(1分】31.最小生成树问题是构造连通网的最小代价生成树。()【青岛大学2001四、10(1分】32.在图G的最小生成树G1中,可能会有某条边的权值超过未选边的权值。()【合肥工业大学2000二、7(1分】33.在用Floyd算法求解各顶点的最短路径时,每个表示两点间路径的path-Il,J]一定是path'[I,J]的子集(k=l,2,3,…,n)。()【合肥工业大学2000二、6(1分)】34.拓扑排序算法把一个无向图中的顶点排成一个有序序列。()【南京航空航天大学1995五、8(1分】35.拓扑排序算法仅能适用于有向无环图。()【南京航空航天大学1997一、7(1分】36.无环有向图才能进行拓扑排序。()【青岛大学2002—、7(1分)2001—、8(1分】37.有环图也能进行拓扑排序。()【青岛大学2000四、6(1分】38.拓扑排序的有向图中,最多存在一条环路。()【大连海事大学2001一、6(1分】39.任何有向图的结点都可以排成拓扑排序,而且拓扑序列不唯一。()【上海交通大学1998一、13]40.既使有向无环图的拓扑序列唯一,也不能唯一确定该图。()【合肥工业大学2001二、6(1分】41.若一个有向图的邻接矩阵对角线以下元素均为零,则该图的拓扑有序序列必定存在。()【中科院软件所1997一、5(1分】42.AOV网的含义是以边表示活动的网。()【南京航空航天大学1995五、7(1分】43.对一个A0V网,从源点到终点的路径最长的路径称作关键路径。【南京航空航天大学1995五、9(1分】44.关键路径是A0E网中从源点到终点的最长路径)【青岛大学2000四、10(1分】45.AOE网一定是有向无环图。()【青岛大学2001一、9(1分】46.在表示某工程的AOE网中,加速其关键路径上的任意关键活动均可缩短整个工程的完成时间。()【长沙铁道学院1997—、2(1分)】47.在A0E图中,关键路径上某个活动的时间缩短,整个工程的时间也就必定缩短。()【大连海事大学2001一、15(1分】48.在AOE图中,关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。()【大连海事大学2001一、16(1分】49.当改变网上某一关键路径上任一关键活动后,必将产生不同的关键路径。【上海交通大学1998一、14] 146三、填空题1.判断一个无向图是一棵树的条件是O2.有向图G的强连通分量是指。【北京科技大学1997一、7]3.一个连通图的是一个极小连通子图。【重庆大学2000一、1】4.具有10个顶点的无向图,边的总数最多为。【华中理工大学2000一、7(1分】5.若用n表示图中顶点数目,则有条边的无向图成为完全图。【燕山大学1998—、6(1分】6.设无向图G有n个顶点和e条边,每个顶点Vi的度为di(l<=i<=n〉,则e=【福州大学1998二、2(2分)】7.G是一个非连通无向图,共有28条边,则该图至少有个顶点。【西安电子科技大2001软件一、8(2分】8.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要条弧。【合肥工业大学2000三、8(2分】9.在有n个顶点的有向图中,每个顶点的度最大可达。【武汉大学2000一、3]10.设G为具有N个顶点的无向连通图,则G中至少有条边。【长沙铁道学院1997二、2(2分)】11.n个顶点的连通无向图,其边的条数至少为。【哈尔滨工业大学2000二、2(1分】12.如果含n个顶点的图形形成一个环,则它有棵生成树。【西安电子科技大学2001软件一、2(2分】 1476.N个顶点的连通图的生成树含有条边。【中山大学1998—、9(1分】7.构造n个结点的强连通图,至少有条弧。【北京轻工业学院2000一、4(2分)8.有N个顶点的有向图,至少需要量条弧Q才能保证是连通的。【西南交通大学2000一、3]9.右图中的强连通分量的个数为()个。c 14818.Prim(普里姆)算法适用于求的网的最小生成树;kruskal(克鲁斯卡尔)算法适用于求的网的最小生成树。【厦门大学1999一、4]19.克鲁斯卡尔算法的时间复杂度为,它对图较为适合。【中科院计算所1999二、3(2分)】20.对于含N个顶点E条边的无向连通图,利用Prim算法生成最小代价生成树其时间复杂度为,利用Kruskal算法生成最小代价生成树其时间复杂度为。【长沙铁道学院1998二、2(4分)】21.下面描述的是一种构造最小生成树算法的基本思想。设要处理的无向图包括n个节点VI,V2,...,Vn,用相邻矩阵A表示,边的权全是正数。请在下列划线处填上正确叙述。(1).若(Vi,Vj)是边,则A(i,j)的值等于,若(Vi,Vj)不是边,则A(i,j)的值是一个比任何边的权,矩阵的对角线元素全为0。(2).构造最小生成树过程中,若节点Vi已包括进生成树,就把相邻矩阵的对角线元素A(i,i)!1成,若(Vi,Vj)已包括进生成树,就把矩阵元素A(i,j)置成。(3).算法结束时,相邻矩阵中的元素指出最小生成树的。【山东工业大学1998二、4(6分]22.有一个用于n个顶点连通带权无向图的算法描述如下:(1).设集合T1与T2,初始均为空;(2).在连通图上任选一点加入T1:(3).以下步骤重复n-1次:a.在i属于Tl,j不属于T1的边中选最小权的边;b.该边加入T2。上述算法完成后,T2中共有条边,该算法称算法,T2中的边构成图的o【南京理工大学1999二、7(4分】23.有向图G可拓扑排序的判别条件是。【长沙铁道学院1998二、9(2分)】24.Dijkstra最短路径算法从源点到其余各顶点的最短路径的路径长度按次序依次产生,该算法弧上的权出现情况时,不能正确产生最短路径。【南京理工大学1999二、8(4分】35.求从某源点到其余各顶点的Dijkstra算法在图的顶点数为10,用邻接矩阵表示图时计算时间约为10ms,则在图的顶点数为40,计算时间约为ms。【南京理工大学2000二、3(1.5分】36.求最短路径的Dijkstra算法的时间复杂度为。【哈尔滨工业大学2001一、5(2分】37.有向图G=(V,E),其中V(G)={0,1,2,3,4,5},用〈a,b,d>三元组表示弧及弧上的权d.E(G)为{<0,5,100>,<0,2,10X1,2,5X0,4,30X4,5,60X3,5,10X2,3,50X4,3,20>},则从源点0到顶点3的最短路径长度是,经过的中间顶点是。【南京理工大学1998三、6(4分】38.上面的图去掉有向弧看成无向图则对应的最小生成树的边权之和为。【南京理工大学1998三、7(4分】39.设有向图有n个顶点和e条边,进行拓扑排序时,总的计算时间为。【西安电子科技大学1999软件一、7(2分)】【武汉大学2000一、7]40.A0V网中,结点表示,边表示。A0E网中,结点表示,边表示。【北京理工大学2001七、3(2分)】41.在AOE网中,从源点到汇点路径上各活动时间总和最长的路径称为。【重庆大学2000—,2]42.在AOV网中,存在环意味着,这是的;对程序的数据流图来说,它表明存在。【厦门大学1999一、2]43.当一个AOV网用邻接表表示时,可按下列方法进行拓扑排序。(1).查邻接表中入度为的顶点,并进栈;(2).若栈不空,则①输出栈顶元素Vj,并退栈;②查Vj的直接后继Vk,对Vk入度处理,处理方法是; 149(1).若栈空时,输出顶点数小于图的顶点数,说明有,否则拓扑排序完成。【南京理工大学1996二、3(6分】37.已知图的邻接表结构为:CONSTvtxnum={图的顶点数}TYPEvtxptr=l..vtxnum;arcptr=arcnode;arcnode=RECORDadjvex:vtxptr;nextarc:arcptrEND;vexnode=RECORDvexdata:{和顶点相关的信息};firstarc:arcptrEND;adjlist=ARRAY[vtxptr]OFvexnode;本算法是实现图的深度优先遍历的非递归算法。其中,使用一个顺序栈stack。栈顶指针为topovisited为标志数组。PROCdfs(g:adjlist;vO:vtxptr);top=0;write(vO);visited[vO]:=ture;p:=g[vO].firstarc;WHILE(topOO)OR(pONIL)DO[WHILEC1)DO[v:=p.adjvex;IF(2)THENp:=p.nextarcELSE[write(v);visited[v]:=true;top:=top+l;stack[top]:=p;IFtopOOTHEN[p:=stack[top];top:=top-l;(4)]]ENDP.同济大学2000二、2(10分)]38.下面的算法完成图的深度优先遍历,请填空。PROGRAMgraph_traver;CONSTnl=maxnode_number;TYPEvtxptr=l..nl;vtxptr0=0..nl;arcptr=~arcnode;arcnode=REC0RDvexi,vexj:vtxptr;nexti,nextj:arcptr;END;;vexnode=RECORDvexdata:char;firstin,firstout:arcptr;END;graph=ARRAY[vtxptrO]OFvexnode;VARga:graph;n:integer;visited:ARRAY[vtxptrO]OFboolean;FUNCorder(g:graph;v:char):vtxptr;(1);i:=n;WHILEg[i].vexdataOvDOi:=i-l;order:=i;ENDF;PROCcreat(varg:graph);readln(n,e);FORi:=1TOnDO[readln(g[i].vexdata);g[i].firstin:二NIL;g[i].firstout:=NIL;]FORk:=1TOeDO[readln(vt,vh);i:=order(g,vt);j:=order(g,vh);new(p);p\vexi:=i;p\vexj:=jd'nexti:=(2);(3):=p;p 150exti:=:(4);(5):=p;]ENDP; 151FUNCfirstadj(g:graph;v:char):vtxptrO;i:=order(g,v);p:=g[i].firstout;IFpONILTHENfirstadi:=(6)ELSEfirstadj:=0;ENDF;FUNCnextadj(g:graph;v:char;w:char):vtxptrO;i:=order(g,v);j:=order(g,w);d:=(7);WHILE(pONIL)AND(p\vexjOj)DO(8);IF_(9)AND(10)THENnextadj:=p 152exti\vexjELSEnextadj:=0;ENDF;PROCdfs(g:graph;vO:char);write(v0:2);visited[order(g,v0)]:=true;w:=(ll);WHILEw<>0DO[IF(12)THENdfs(g,g[w].vexdata);w:=(13);]ENDP;PROCtraver(g:graph);FORi:=lTOnDOvisited[i]:=false;FORi:=1TOnDOIFNOTvisited[i]THENdfs(g,g[i].vexdata);ENDP;BEGINcreat(ga);traver(ga);END.【北方交通大学1999三(20分】46.n个顶点的有向图用邻接矩阵array表示,下面是其拓扑排序算法,试补充完整。注(1).图的顶点号从。开始计;(2).indegree是有n个分量的一维数组,放顶点的入度;(3).瞰crein用于算顶点入度;(4).有三个函数push(data),pop(),check()其含义为数据data进栈,退栈和测试栈是否空(不空返回1,否则0)。crein(array,indegree,n){for(i=0;i 153)【南京理工大学2000三、4(6分】47.假设给定的有向图是用邻接表表示,作为输入的是图中顶点个数n和边的个数叫以及图的m条边。在下面的程序中,我们用readdata程序过程输入图的信息,并建立该图的邻接表;利用topol程序过程获得图中顶点的一个拓扑序列。PROGRAMtopol_order(input,output);CONSTmaxn=20;TYPEnodeptr=nltype;nltype=RECORDnum:integer;1ink:nodeptrEND;chtype=RECORDcount:integer;head:nodeptrEND;VARch:ARRAY[1..maxn]OFchtype;m,n,top:integer;PROCEDUREreaddata;VARi,j,u,v:integer;p:nodeptr;BEGINwrite('inputvertexnumbern=z);readln(n);write('inputedgenumberm=');readln(m);FORi:=lTOnDOBEGINch[i],count:=0;ch[i].head:=NILEND;writein(zinputedges:FORj:=1TOmDOBEGINwrite(j:3,':');readln(u,v);new(p);ch[v].count:=ch[v].count+1;p 154um:=v;⑴;⑵;ENDEND;PROCEDUREtopol;VARi,j,k:integer;t:nodeptr;BEGINtop:=0;FORi:=1TOnDOIFch[i].count=0THENBEGINch[i].count:=top;top:=iEND;i:=0;WHILE0DOBEGIN(4);(5);write(j:5);i:=i+1;t:=ch[j].head;WHILEtONILDOBEGINk:=num;ch[k].count:=ch[k].count-1;IFch[k],count=0THENBEGINch[k].count:=top;top:=kEND;(6);ENDEND;writein; 155IFi 156graphhasacycle 157");exit(l);}else{.i=top;(2);printf("v%d,”,j);for(ptr=graph[j].link;ptr;ptr=ptr->link){k=ptr->vertex;graph[k].count—;if((3)){graph[k].count=top;top=k;}}})【浙江大学2000六(15分)】四、应用题1.(1).如果G1是一个具有n个顶点的连通无向图,那么G1最多有多少条边?G1最少有多少条边?(2).如果G2是一个具有n个顶点的强连通有向图,那么G2最多有多少条边?G2最少有多少条边?(3).如果G3是一个具有n个顶点的弱连通有向图,那么G3最多有多少条边?G3最少有多少条边?【复旦大学1997一(9分】2.n个顶点的无向连通图最少有多少条边?n个顶点的有向连通图最少有多少条边?【山东大学2000—、3(4分)】3.一个二部图的邻接矩阵A是一个什么类型的矩阵?【北京科技大学1999一、8(2分】4.还月具有n个顶点和多于n-1条边的无向连通图G一定不是树。【东南大学1993四(10分】5.证明对有向图的顶点适当的编号,可使其邻接矩阵为下三角形且主对角线为全0的充要条件是该图为无环图。【北京邮电大学2002三(10分】6.用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否有关?【西安电子科技大学2000计应用一、6(5分】7.请回答下列关于图(Graph)的一些问题:(每题4分)(1).有n个顶点的有向强连通图最多有多少条边?最少有多少条边?(2).表示有1000个顶点、1000条边的有向图的邻接矩阵有多少个矩阵元素?是否稀疏矩阵?(3).对于一个有向图,不用拓扑排序,如何判断图中是否存在环?【清华大学2000一(12分】8.解答问题。设有数据逻辑结构为:B=(K,R),K={kl,k2,…,k9}R={ 1585.试用下列三种表示法画出网G的存储结构,并评述这三种表示法的优、缺点:(1).邻接矩阵表示法;(2).邻接表表示法;(3).其它表示法。【华中理工大学2000三(12分】6.已知无向图G,V(G)={1,2,3,4},E(G)={(1,2),(1,3),(2,3),(2,4),(3,4)}试画出G的邻接多表,并说明,若已知点I,如何根据邻接多表找到与I相邻的点j?【东南大学1994一、2(8分)1998—、6(8分】7.如何对有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的1都集中到对角线以上?【清华大学1999一、5(2分】8.假定G=(V,E)是有向图,V={1,2N),N>=1,G以邻接矩阵方式存储,G的邻接矩阵为A,即A是一个二维数组,如果i到j有边,则A[i,j]=l,否则A[i,j]=0,请给出一个算法,该算法能判断G是否是非循环图(即G中是否存在回路),要求算法的时间复杂性为0(n*n)。【吉林大学1998三(16分)】9.首先将如下图所示的无向图给出其存储结构的邻接链表表示,然后写出对其分别进行深度,广度优先遍历的结果。【天津大学1999一】10.下面的邻接表表示一个给定的无向图(1)给出从顶点vl开始,对图G用深度优先搜索法进行遍历时的顶点序列;(2)给出从顶点vl开始,对图G用广度优先搜索法进行遍历时的顶点序列。【复旦大学1998六(10分)) 159►irrA^iTTTviI—^»BZC3->l5_LA]•i3_i^->[6~nn,EC5HHZ315题图14题图5.给出图G:(1).画出G的邻接表表示图;(2).根据你画出的邻接表,以顶点①为根,画出G的深度优先生成树和广度优先生成树。【南开大学1997五(14分)】6.设G=(V,E)以邻接表存储,如图所示,试画出图的深度优先和广度优先生成树。【北京轻工业学院1998八(6分】7.对一个图进行遍历可以得到不同的遍历序列,那么导致得到的遍历序列不唯一的因素有哪些?【北京航空航天大学19987(4分】8.解答下面的问题(1).如果每个指针需要4个字节,每个顶点的标号占2个字节,每条边的权值占2个字19题图20题图(2).写出下图从顶点1开始的DFS树。【西安电子科技大学2000计应用六(10分】20.如下所示的连通图,请画出:(1).以顶点①为根的深度优先生成树:(5分)(2).如果有关节点,请找出所有的关节点。(5分)【清华大学1998七(10分】21.某田径赛中各选手的参赛项目表如下:姓名参赛项ZHA0ABIIQIANCDSHUNCEFLII)FAZHOUBF设项目A,B,…,F各表示一数据元素,若两项目不能同时举行,则将其连线(约束条件). 160(1).根据此表及约束条件画出相应的图状结构模型,并画出此图的邻接表结构;(2).写出从元素A出发按“广度优先搜索”算法遍历此图的元素序列.【北京科技大学1999五2000五(12分】22.已知无向图如下所示:(1).给出从VI开始的广度优先搜索序列;(2).画出它的邻接表;(3).画出从VI开始深度优先搜索生成树。【燕山大学2000五(5分】第22题图第23题图23.已知某图的邻接表为(1).写出此邻接表对应的邻接矩阵:(2分)(2).写出由vl开始的深度优先遍历的序列;(2分)(3).写出由vl开始的深度优先的生成树;(2分)(4).写出由vl开始的广度优先遍历的序列;(2分)(5).写出由vl开始的广度优先的生成树:(2分)(6).写出将无向图的邻接表转换成邻接矩阵的算法。(8分)【山东大学1998六、18分】24.考虑右图:(1)从顶点A出发,求它的深度优先生成树(2)从顶点E出发,求它的广度优先生成树(3)根据普利姆(Prim)算法,求它的最小生成树【上海交通大学1999六(12分)】25.在什么情况下,Prim算法与Kruskual算法生成不同的MST?【西安电子科技大学2000计应用一、11(5分】26.下面是求无向连通图最小生成树的一种方法。将图中所有边按权重从大到小排序为(5,ez,…,e.)i:=1WHILE(所剩边数>=顶点数)BEGIN从图中删去et若图不再连通,则恢复日i:=i+lEND.试证明这个算法所得的图是原图的最小代价生成树。【北京邮电大学1999五(10分】27.已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小树(假设以①4为起点,试画出构造过程)。【哈尔滨工业大学1999九20o1410 16127题图28题图22.G=(V,E)是一个带有权的连通图,则:(1).请回答什么是G的最小生成树:(2).G为下图所示,请找出G的所有最小生成树。【北方交通大学1993二(12分】29.试写出用克鲁斯卡尔(Kruskal)算法构造下图的一棵最小支撑(或生成)树的过程。【吉林大学2000—、3(3分)】30.求出下图的最小生成树。【合肥工业大学1999四、2(5分】第30题图31.一带权无向图的邻接矩阵如下图,试画出它的一棵最小生成树。oOoOO21111O1Aoo1AnV1A1±00301200【浙江大学1994五(8分)】第32题图32.请看下边的无向加权图。(1).写出它的邻接矩阵(5分)(2).按Prim算法求其最小生成树,并给出构造最小生成树过程中辅助数组的各分量值(15分)辅助数组内各分量值:【华北计算机系统工程研究所1999四(20分)】YClosedge2345678UV.-UVexLowcost 162VexLowcostVexLowcostVexLowcostVexLowcostVexLowcostVexLowcostVexLowcost33.已知世界六大城市为:北京(Pe)、纽约(N)、巴黎(Pa)、伦敦(L)、东京(T)、墨西哥(M),下表给定了这六大城市之间的交通里程:世界六大城市交通里程表(单位:百公里)PENPALTMPE109828121124N109585510832PA825839792L815539589T211089795113M124329289113125138143246232314351361045746115615生成树。(1).画出这六大城市的交通网络图;(2).画出该图的邻接表表示法;(3).画出该图按权值递增的顺序来构造的最小(代价)生成树.【上海海运学院1995六(9分)1999五(14分】34.已知顶点1-6和输入边与权值的序列(如右图所示):每行三个数表示一条边的两个端点和其权值,共11行。请你:(1).采用邻接多重表表示该无向网,用类PASCAL语言描述该数据结构,画出存储结构示意图,要求符合在边结点链表头部插入的算法和输入序列的次序。(2).分别写出从顶点1出发的深度优先和广度优先遍历顶点序列,以及相应的(3).按prim算法列表计算,从顶点1始求最小生成树,并图示该树。【北京工业大学1999四(20分)】 16335.下图表示一个地区的通讯网,边表示城市间的通讯线路,边上的权表示架设线路花费的代价,如何选择能沟通每个城市且总代价最省的nT条线路,画出所有可能的选择。【东北大学2000—、4(4分)】第36题图36.设无向网G如上:第35题图(1).设顶点a、b、c、d、e、f、h的序号分别为1、2、3、4、5、6、7,请列出网G的邻接矩阵、画出网G的邻接表结构:(2).写出从顶点a出发,按“深度优先搜索”和“广度优先搜索”方法遍历网G所的到的顶点序列:按Prim算法求出网G的一棵最小生成树。【北京科技大学2001五(12分)】37.有一图的邻接矩阵如下,试给出用弗洛伊德算法求各点间最短距离的矩阵序列A',「,A3,A'o02oooooo0165oo04.3oooo0【北京邮电大学2001四、5(5分)38.下图所示是一带权有向图的邻接表法存储表示。其中出边表中的每个结点均含有三个字段,依次为边的另•个顶点在顶点表中的序号、边上的权值和指向下一个边结点的指针。试求:(1).该带权有向图的图形;(2).从顶点VI为起点的广度优先周游的顶点序列及对应的生成树(即支撑树);(3).以顶点VI为起点的深度优先周游生成树;(4).由顶点VI到顶点V3的最短路径。【中山大学1994四(12分】39.用最短路径算法,求如下图中a到z的最短通路。【西南财经大学1999四】40.已知一有向网的邻接矩阵如下,如需在其中一个结点建立娱乐中心,要求该结点距其它各结点的最长往返路程最短,相同条件下总的往返路程越短越好,问娱乐中心应选址何处?给出解题过程。 164VI~()2co00003一V2000320000V3400000400V4100000100V5001000003V6000025000【北京邮电大学2002四、1(10分】【厦门大学2002八、2(5分)】38.求出下图中顶点1到其余各顶点的最短路径。39.试利用Dijkstra算法求下图中从顶点a到其他个顶点间的最短路径,写出执行算法过程中各步的状态。【东南大学2000四(10分】40.对于如下的加权有向图,给出算法Dijkstra产生的最短路径的支撑树,设顶点A为源点,并写出生成过程。【吉林大学1999一、2(4分)】第44.已知图的邻接矩阵为:VIV2V3V4V5V6V7V8V9V10VI0111000000V20001100000V30001010000V40000011010V50000001000V60000000110V70000000010V80000000001V90000000001V100000000000当用邻接表作为图的存储结构,且邻接表都按序号从大到小排序时,试写出:(1).以顶点VI为出发点的唯一的深度优先遍历;(2).以顶点VI为出发点的唯一的广度优先遍历;(3).该图唯一的拓扑有序序列。【同济大学1998-(12分)】45.已知一图如下图所示:(1).写出该图的邻接矩阵;(2).写出全部拓扑排序;(3).以vl为源点,以v8为终点,给出所有事件允许发生的最早时间和最晚时间,并 165给出关键路径;(4).求VI结点到各点的最短距离。【北京邮电大学2000五第45是45.(1).对于有向无环图,叙述求拓扑有序序列的步骤:(2).对于以下的图,写出它的四个不同的拓扑有序序列。【南开大学1998二(12分)】47.有向图的拓扑排序能否用图的深度搜索模式来查找?若能,请简述方法,若不能,请简述原因【西北大学2000二、8(5分)】48.下图是带权的有向图G的邻接表表示法,求:(1).以结点VI出发深度遍历图G所得的结点序列;(2).以结点VI出发广度遍历图G所得的结点序列;(3).从结点VI到结点V8的最短路径;(4).从结点VI到结点V8的关键路径。2634388A512A33851820八4156650八411八V8A【青岛海洋大学1999四(10分】49.对有五个结点{A,B,C,D,E}的图的邻接矩阵,010()3000io-000000000006002000QO1()00000000000500(1).画出逻辑图;(2).画出图的十字链表存储;(3).基于邻接矩阵写出图的深度、广度优先遍历序列;(4).计算图的关键路径。【华南师范大学1999三(20分)】50.何为A0E网的始点和终点,一个正常的A0E网是否只有一个始点和一个终点?【首都经贸大学1997一、4(4分】51.下表给出了某工程各工序之间的优先关系和各工序所需时间 166(1).画出相应的AOE网(2).列出各事件的最早发生时间,最迟发生时间(3).找出关键路径并指明完成该工程所需最短时间.【武汉交通科技大学1996二、6(7分)】工序代号ABCDEFGIIIJKLMN所需时间15105081540300151206015302040先驱工作一———A,BBC,DBEG.IEIF.IH,J,KLG52.对图示的AOE网络,计算各活动弧的e(a,)和1(a)的函数值,各事件(顶点)的ve(Vj)和vl(Vj)的函数值,列出各条关键路径。【北京轻工业学院1997四(15分】第52题图第53题工程作业的网络图53.请写出应填入下列叙述中()内的正确答案。某一工程作业的网络图如图所示,其中箭头表示作业,箭头边的数字表示完成作业所需的天数。箭头前后的圆圈表示事件,圆圈中的数字表示事件的编号。用事件编号的序列(例如0-2-7-9-11)表示进行作业的路径。完成此工程的关键路径是(A)完成此工程所需的最少天数为(B)天,此工程中具有最大充裕天数的事件是(C),充裕天数是(D)«关键路径上的事件的充裕天数是(E).隔大学2002三(10分】五、算法设计题1.(单独命题考生做)设无向图G有n个顶点,m条边。试编写用邻接表存储该图的算法。(设顶点值用1〜n或。〜nT编号)【南京航空航天大学1996十二(10分】2.请用流程图或类高级语言(pascal或c)表示算法。已知有向图有n个顶点,请写算法,根据用户输入的偶对建立该有向图的邻接表。即接受用户输入的<vi,vj>(以其中之一为0标志结束),对于每条这样的边,申请一个结点,并插入到的单链表中,如此反复,直到将图中所有边处理完毕。提示:先产生邻接表的n个头结点(其结点数值域从1到n)。【上海大学2000四(16分】3.设无向图G有n个点e条边,写一算法建立G的邻接多表,要求该算法时间复杂性为0(n+e),且除邻接多表本身所占空间之外只用0(1)辅助空间。【东南大学1995六(16分)1997二(15分】4.给出以十字链表作存储结构,建立图的算法,输入(i,j,v)其中i,j为顶点号,v为权值。【河海大学1998六(10分】5.设有向G图有n个点(用1,2,…,n表示),e条边,写一算法根据其邻接表生成其反向邻接表,要求算法复杂性为O(n+e)。【东南大学1996三(13分】类似本题的另外叙述有:(1)下图(编者略)是有向图按出度建立的邻接表,试写一算法,将此出度邻接表改成入度建立的邻接表。【北京邮电大学1993五(15分】 167(2)编写算法实现以下功能:根据含有n个顶点的有向图邻接表,构造相应的逆邻接表。【东南大学1992六(18分】1.写出从图的邻接表表示转换成邻接矩阵表示的算法,用类PASCAL语言(或C语言)写成过程形式。【南开大学1998四(16分)】类似本题的另外叙述有:(1)已知某个图的邻接表,试建立该图的相邻矩阵。【天津大学1999五】2.设已给出图的邻接矩阵,要求将邻接矩阵转换为邻接表,用类pascal语言写为过程形式。【南开大学1998四(14分)】类似本题的另外叙述有:(1)设已给出图的邻接矩阵,要求将图的邻接矩阵转化为邻接表,试实现其算法。【南开大学2000=3](2)编写算法,将图的邻接矩阵存储改为邻接表的存储。【中山大学1998五、2(10分】3.试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点V,到顶点V」的路径注意:算法中涉及的图的基本操作必须在存储结构上实现。【哈尔滨工业大学2001九(12分】类似本题的另外叙述有:(1)设计一个深度优先搜索算法,以判断用邻接表方式存储的有向图中是否存在由顶点Vi到顶点Vj(iWj)的路径。【中山大学1999数四(15分】(2)按图的宽度优先搜索法写一算法判别以邻接矩阵存储的有向图中是否存在由顶点Vi到顶点Vj的路径(iKj)。【中山大学1997五(10分】(3)请用流程图或类高级语言(pascal或c)表示算法。写算法判别以邻接方式存储的无向图中是否存在由顶点Vi到顶点Vj的路径【上海大学1999三、2(14分】4.已知无向图采用邻接表存储方式,试写出删除边(i,j)的算法。【东南大学1999三(10分】类似本题的另外叙述有:(1)一个无向连通图的存储结构以邻接表的形式给定,设计算法删除该图中的一条边(i,j)1.【北京工业大学1996二(15分)】(2)无向图G已按下图(编者略)邻接表存储。试编写算法在该邻接表上操作,删除从顶点I到顶点J之间的一条边。【上海大学1996六(18分】(3)设无向图G用邻接表表示,(编者略)请写出在该无向图中删除边(i,j)的算法。【青岛海洋大学1999五(13分】5.假设有向图以邻接表存储,试编写算法删除弧<V,.V,>的算法。【北京轻工业学院1997五(10分16.假设有向图以十字链表存储,试编写算法,插入弧【北京轻工业学院1998四(14分】7.设有向图用邻接表表示,图有n个顶点,表示为1至n,试写一个算法求顶点k的入度(l 168是否是非循环图(即G中是否存在回路),要求算法的时间复杂性为0(n*n)。【吉林大学1997五(16分)】1.假设一个有向图G已经以十字链表形式存储在内存中,试写一个判断该有向图中是否有环路(回路)的算法。【东北大学2000四、3(12分)】2.用邻接多重表存储结构,编写FIRST-ADJ(G,V)函数,函数返回值为第一个邻接点,若V没有邻接点,返回零。【北京工商大学1999四(12分】3.在有向图G中,如果r到G中的每个结点都有路径可达,则称结点r为G的根结点。编写一个算法完成下列功能:(1).建立有向图G的邻接表存储结构;(2).判断有向图G是否有根,若有,则打印出所有根结点的值。【东北大学2001五(15分)】17.试编写求无向图G的连通分量的算法。要求输出每一连通分量的顶点值。(设图G已用邻接表存储)【南京航空航天大学1995十一(10分】类似本题的另外叙述有:(1)写出求无向图G中各连通分量的顶点集的算法COMF(G)。可调用的运算是:FIRST_ADJ(G,V)一求顶点V的第一邻接点,NEXTADJ(G,V,W)一求顶点V关于W的下一个邻接点。【北京科技大学1998八、2(10分】(2)编程求解无向图G的所有连通分量。【南京航空航天大学2000七】18.设无向图G已用邻接表结构存储,顶点表为GL[n](n为图中顶点数),试用''广度优先搜索”方法,写出求图G中各连通分量的C语言描述算法:BFSCOM(GL).(注:算法中可调用队列操作的基本算法。)【北京科技大学2001七、2(10分】19.设一个连通无向图G=(V,E)采用邻接表方式存储,V=(l,2,…,n},一维数组HAED[1…n]用来存放每个单链表的头指针,单链表中节点结构为(VER,LINK),其中LINK是链接字段,VER字段表示顶点内容,一维数组MARK[1…n]用于对相应顶点加标号,MARK[i]=O表示顶点i未被访问到,MARK[i]=l表示顶点i已经被访问过,试写出对上述图G进行广度(或宽度)优先遍历(或访问)的非递归算法BFS(HEAD,n,s,MARK,MARK),其中S为任一遍历起始顶点。【吉林大学2000二、1(7分】20.写出图的深度优先搜索DFS算法的非递归算法。【北京邮电大学1994十(15分】21.已知连通图如下: 169(1).给出本图的邻接表;(2).若从顶点B出发对该图进行遍历,在(1)的基础上分别给出本图的按深度优先搜索和按广度优先搜索的顶点序列;(3).写出按深度优先搜索的递归程序。【厦门大学2001三(12%分)】17.试编写从某一顶点出发按深度优先搜索策略在图的邻接表上遍历一个强连通图的非递归算法。(用类PASCAL语言)【燕山大学1999十、2(8分】18.设计算法以实现对无向图G的深度遍历,要求:将每一个连通分量中的顶点以一个表的形式输出。例如,下图的输出结果为:(1,3)(2,6,7,4,5,8)(9,10)(T)(7)(7)(V)CD(注:本算法中可以调用以下几个函数:firstadj(g.v)——返回图g中顶点v的第一个邻接点的号码,若不存在,则返回0;nextadj(g,v,w)返回图g中顶点v的邻接点中处于w之后的邻接点的号码,若不存在,则返回0。nodes(g)返回图g中的顶点数)【合肥工业大学2000五、4(8分】19.请设计一个图的抽象数据类型(只需要用类PASCAL或类C/C++语言给出其主要功能函数或过程的接口说明,不需要指定存储结构,也不需要写出函数或过程的实现方法),利用抽象数据类型所提供的函数或过程编写图的宽度优先周游算法。算法不应该涉及具体的存储结构,也不允许不通过函数或过程而直接引用图结构的数据成员,抽象数据类型和算法都应该加足够的注释。【北京大学1999二、1(10分】20.设计算法以判断给定的无向图G中是否存在•条以V0为起点的包含所有顶点的简单路径,若存在,返回TRUE,否则,返回FALSE(注:本算法中可以调用以下几个函数:FIRSTADJ(G,V)一—返回图G中顶点V的第一个邻接点的号码,若不存在,则返回0;NEXTADJ(G,V,W)一一返回图G中顶点V的邻接点中处于W之后的邻接点的号码,若不存在,则返回0;NODES(G)——返回图G中的顶点数)【合肥工业大学1999五、5(8分)】21.已有邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有则印出该路径上的顶点。要求:先描述图的存储结构,并简述算法思路:查找邻接点等图的运算要自己实现。(尽量采用非递归算法,否则满分15分)【北京工业大学2000六(20分】类似本题的另外叙述有:(1)已知有向图和图中的两个结点u和v,试编写算法求有向图中从u到v的所有简单路径。【东南大学2001四(15分】第26题图第27题图(2)已知有向图和图中两个顶点U和V,编写算法求有向图中从U到V的所有简单路径,并以下图为例执行所编写的算法,画出相应的搜索过程图。【山东科技大学2002六(18分】22.图的D搜索类似与BFS,不同之处在于使用栈代替BFS中的队列,入出队列的操作改为入出栈的操作,即当一个顶点的所有邻接点被搜索之后,下一个搜索出发点应该是最近入栈(栈顶)的顶点。 170(1).用邻接表做存储结构,写一个D一搜索算法:(15分)(2).用D一搜索方法的访问次序和相应的生成树,当从某顶点出发搜索它的邻接点,请按邻接点序号递增序搜索,以使答案唯一。(5分)【中科院1998六(20分)】28.令6=(V,E)为一个有向无环图,编写一个给图G中每一个顶点赋以一个整数序号的算法,并满足以下条件:若从顶点i至顶点j有一条弧则应使i 171表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。【中国矿业大学2000十五(15分】第33题图第34题图34、求解下面有向图的有关问题:(1)判断此有向图是否有强连通分量?若有请画出:(2)画出此有向图的十字链表存储结构:其顶点表结点为(data,firstin,firstout),其中data是顶点的有关信息,firstin是指向以该顶点为弧头的第一条边的指针,firstout是指向以该顶点为弧尾的第一条边的指针。其表结点的结构为(tailvex,headvex,weight,hlink,tlink),其中tailvex,headvex分别为弧尾和弧头在图中的序号,weight是弧上的权值,hlink,tlink分别为指向弧头相同和弧尾相同的下一条边的指针。(3)设其顶点a,b,c,d,e表示一个乡的5个村庄,弧上的权值表示为两村之间的距离;①求每个村庄到其它村庄的最短距离;②乡内要建立一所医院,问医院设在哪个村庄才能使各村离医院的距离较近。【北京邮电大学1997五(15分】35.设计算法,求出无向连通图中距离顶点V0的最短路径长度(最短路径长度以边数为单位计算)为K的所有的结点,要求尽可能地节省时间。【西北大学2001七】36.自由树(即无环连通图)T=(V,E)的直径是树中所有点对间最短路径长度的最大值,即T的直径定义为MAXD(u,v),这里D(u,v)(u.vEV)表示顶点u到顶点v的最短路径长度(路径长度为路径中所包含的边数)。写一算法求T的直径,并分析算法的时间复杂度。(时间复杂度越小得分越高)【中科院1999五、3(20分)】37.求图的中心点的算法。设V是有向图G的一个顶点,我们把V的偏心度定义为:max{从w到v的最短距离|w是g中所有顶点},如果v是有向图G中具有最小偏心度的顶点,则称顶点v是G的中心点。【长沙铁道学院1998五、2(10分)】38.设G是含有n顶点(设顶点编号为1,2,…,n)的有向无环图。将G用如下定义的邻接表存储:TYPEarcptr=tarcnode;arcnode=REC0RD{邻接表中的结点}adjvex:1..n;nextarc:arcptr;END;vexnode=RECORD{邻接表的表头结点}vexnum:1..n;firstarc:arcptr;mpl:integerEND;Hnodes=ARRAY[l..n]OFvexnode;请编写一个非递归算法求G的每个顶点出发的最长路径的长度(每条弧的长度均为1)并存入mpl域中。要求:首先写出算法思想,然后写算法过程。【山东科技大学2001六(20分】39.图G有n个点,利用从某个源点到其余各点最短路径算法思想,设计一产生G的最小生成树的算法。【东南大学1994四(18分】40.设G是一个用邻接表表示的连通无向图。对于G中某个顶点v,若从G中删去顶点v及与顶点v相关联的边后,G变成由两个或两个以上非空连通分量所组成的图,则称v是原来图G 172的一个关节顶点。如下图中,只有顶点4和顶点6是关节顶点,而其它顶点都不是关节顶点。试叙述寻找图G的所有关节顶点的算法,并用算法语言(PASCAL或C)编写一个实现你所给出的算法的程序。【复旦大学1996八(20分】35.对于一个使用邻接表存储的有向图G,可以利用深度优先遍历方法,对该图中结点进行拓扑排序。其基本思想是:在遍历过程中,每访问一个顶点,就将其邻接到的顶点的入度减一,并对其未访问的、入度为0的邻接到的顶点进行递归。(1).给出完成上述功能的图的邻接表定义(结构):(4分)(2).定义在算法中使用的全局辅助数组。(4分)(3).写出在遍历图的同时进行拓扑排序的算法:(10分)【东北大学1999五(18分)】【清华大学1997一(18分】36.欲用四种颜色对地图上的国家涂色,有相邻边界的国家不能用同一种颜色(点相交不算相邻)。(1).试用一种数据结构表示地图上各国相邻的关系,(6分)。(2).描述涂色过程的算法。(不要求证明)(12分)。【浙江大学2002八(18分】 173第八章动态存储管理一、选择题1.动态存储管理系统中,通常可有()种不同的分配策略。【长沙铁道学院1998三、3(2分)】A.1B.2C.3D.4E.5二、判断题1.在伙伴系统中的伙伴是指任意两块大小相同、位置相邻的内存块。()【北京邮电大学2000一、8(1分)】2.在动态存储管理系统中做空间分配时,最佳适配法与最先适配法相比,前者容易增加闲置空间的碎片。()【东南大学20011-1(1分)】【中山大学1994一、1(2分】三、填空题1.起始地址为480,大小为8的块,其伙伴块的起始地址是;若块大小为32,则其伙伴块的起始地址为。【北方交通大学1999二、1(4分】2.二进制地址为011011110000,大小为(4)io和(16)io块的伙伴地址分别为:、【上海大学2002二、2(2分】3.无用单元是指,例【北方交通大学1999二、6(4分】四、应用题1.伙伴空间(名词解释)【西北工业大学1999一、4(3分】2.设内存中可利用空间已连成个单链表,对用户的存储空间需求,•般有哪三种分配策略?【北京科技大学1999一、6(2分】3.计算起始二进制地址为011011110000,长度为4(十进制)的块的伙伴地址是多少?【中山大学1999一、2(3分)】4.在一个伙伴系统中,已知某存储块的始址X=(011011110000)2,大小为2",则它的伙伴块的始址是多少?【北方交通大学1996、1(5分】5.地址为(1664)io大小为(128)io的存储块的伙伴地址是什么?地址为(2816)1。大小为(64)io的存储块的伙伴地址是什么?【清华大学1996四】6.试叙述动态存储分配伙伴系统的基本思想,它和边界标识法不同点是什么?【青岛大学2000十(10分)】【中国人民大学2000一、1(4分】7.组织成循环链表的可利用空间表附加什么条件时,首次适配策略就转变为最佳适配策略?【北方交通大学1998四(8分】8.已知一个大小为512个字长的存储,假设先后有6个用户申请大小分别为23,45,52,100,11和19的存储空间,然后再顺序释放大小为45,52,11的占用块。假设以伙伴系统实现动态存储管理。(1)画出可利用空间表的初始状态。(2)画出为6个用户分配所需要的存储空间后可利用空间表的状态以及每个用户所得到的存储块的起始地址。(3)画出在回收3个占用块之后可利用空间表的状态。【清华大学1998三(15分)】【同济 174大学1999]1.下图所示的伙伴系统中,回收两块首地址分别为768及128,大小为2,的存储块,请画出回收后该伙伴系统的状态图。【北京邮电大学1996:(10分】2.假设利用边界标识法,并以首次拟合策略分配,已知在某个时刻可利用空间表的状态如下图所示:(注:存储块头部size域的值和申请分配的存储量均包括头部和尾部的存储空间。)请画出:(1)当系统回收一个起始地址为559,大小为45的空闲块之后的链表状态:(2)系统继而在接受存储块大小J/'勺的请求后,又回收一个起始地址为515,大小为44的空闲块之后的链表状态。【上海4或4)02二、3(8分】第10题图:可利用空间表的状态图 175第九章集合一、选择题1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度人$1为()。【北京航空航天大学2000一、8(2分】A.(n-l)/2B.n/2C.(n+l)/2D.n2.对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()【南京理工大学1998—、7(2分】A.(N+l)/2B.N/2C.ND.[(1+N)*N]/23.顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为((1)),二分法查找只适用于查找顺序存储的有序表,平均比较次数为((2))。在此假定N为线性表中结点数,且每次查找都是成功的。【长沙铁道学院1997四、3(4分)】A.N+lB.21og2NC.logND.N/2E.Nlog2NF.N24.下面关于二分查找的叙述正确的是()【南京理工大学1996一、3(2分】A.表必须有序,表可以顺序方式存储,也可以链表方式存储C.表必须有序,而且只能从小到大排列B.表必须有序且表中数据必须是整型,实型或字符型D.表必须有序,且表只能以顺序方式存储5.对线性表进行二分查找时,要求线性表必须()【燕山大学2001一、5(2分】A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以链接方式存储D.以链接方式存储,且数据元素有序6.适用于折半查找的表的存储方式及元素排列要求为()【南京理工大学1997一、6(2分】A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序7.用二分(对半)查找表的元素的速度比用顺序法()【南京理工大学1998—、11(2分】A.必然快B.必然慢C.相等D.不能确定8.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度()A.必定快B.不一定C.在大部分情况下要快D.取决于表递增还是递减【南京理工大学1997一、7(2分】9.具有12个关键字的有序表,折半查找的平均查找长度(”中山大学1998二、10(2分】A.3.1B.410.折半查找的时间复杂性为(A.0(n2)B.0(n)C.2.5D.5)【中山大学1999一、15]C.0(nlog")D.0(log")11.当采用分快查找时,数据的组织方式为()【南京理工大学1996一、7(2分】A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D.数据分成若干块,每块(除最后一块外)中数据个数需相同12.二叉查找树的查找效率与二叉树的((1))有关,在((2))时其查找效率最低【武汉交通科技大学1996—、2(4分)】(1):A.高度B.结点的多少C.树型D.结点的位置(2):A.结点太多B.完全二叉树C.呈单枝树D.结点太复杂。13.要进行顺序查找,则线性表(1);要进行折半查询,则线性表(2);若表中元素个数为n,则顺序查找的平均比较次数为(3);折半查找的平均比较次数为(4),【北方交通大学1999一、2(4分】 176(1)(2):A.必须以顺序方式存储;B.必须以链式方式存储;C.既可以以顺序方式存储,也可以链式方式存储;D.必须以顺序方式存储,且数据已按递增或递减顺序排好;E.必须以链式方式存储,且数据已按递增或递减的次序排好。(3)(4):A.nB.n/2C.n*nD.n*n/2E.log?"F.nloga"G.(n+l)/2H.log2(n+l)14.在等概率情况下,线性表的顺序查找的平均查找长度人$1为((1)),有序表的折半查找的人$1为((2)),对静态树表,在最坏情况下,人51为((3)),而当它是一棵平衡树时,ASL为((4)),在平衡树上删除一个结点后可以通过旋转使其平衡,在最坏情况下需((5))次旋转。供选择的答案:【上海海运学院1999二、3(5分】(1)(2)(3)(4)(5):A.0(1)B.0(log;)C.0((log2n)2)D.0(nlog2")E.0(n)15.对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是((1)),对于查找成功,他们的平均查找长度是((2))供选择的答案:【上海海运学院1997二、4(3分】A.相同的B.不同的16.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用()查找法。A.分快查找B.顺序查找C.折半查找D.基于属性【西安电子科技大学2001应用一、8(2分】17.既希望较快的查找又便于线性表动态变化的查找方法是()【北方交通大学2000二、4(2分】A.顺序查找B.折半查找C.索引顺序查找D.哈希法查找18.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是()【合肥工业大学2000—、4(2分】A.(100,80,90,60,120,110,130)B.(100,120,110,130,80,60,90)C.(100,60,80,90,120,110,130)D.(100,80,60,90,120,130,110)19.在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0右孩子的平衡因子为1,则应作()型调整以使其平衡。【合肥工业大学2001一、4(2分】A.LLB.LRC.RLD.RR20.下列关于m阶B-树的说法错误的是()【南京理工大学1997一、9(2分】A.根结点至多有m棵子树B.所有叶子都在同一层次上C.非叶结点至少有m/2(m为偶数)或m/2+1(m为奇数)棵子树D.根结点中的数据是有序的21.下面关于m阶B树说法正确的是()【南京理工大学1999一、5(2分】①每个结点至少有两棵非空子树;②树中每个结点至多有m—1个关键字;③所有叶子在同一层上;④当插入一个数据项引起B树结点分裂后,树长高一层。A.①②③B.②③C.②③④D.③22.下面关于B和B+树的叙述中,不正确的是()【北方交通大学2001一、17(2分】A.B树和B+树都是平衡的多叉树。B.B树和B+树都可用于文件的索引结构。C.B树和B+树都能有效地支持顺序检索。D.B树和B+树都能有效地支持随机检索。23.m阶B-树是一棵()【北京邮电大学2000二、2(20/8分】A.m叉排序树B.m叉平衡排序树C.m-1叉平衡排序树D.m+1叉平衡排序树24.在一棵含有n个关键字的m阶B-树中进行查找,至多读盘()次【中科院计算所2000一、6(2分)】A.log2"B.l+log2nC.1+log2I2Jd.1+1og2I2J 17722.m路B+树是一棵((1)),其结点中关键字最多为((2))个,最少((3))个。【中科院计算机1999一、5]A.01路平衡查找树B.m路平衡索引树C.m路Ptrie树D.m路键树E.m-1F,mG.m+1mH.2-126在一棵m阶的B+树中,m+1m/n4-1A..2_B..2.C..2.D.1WSW每个非叶结点的儿子数S应满足().【武汉交通科技大学1996一、3(4分)】m_T_27.设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H(key)=keyMOD13,散列地址为1的链中有()个记录。【南京理工大学1997一、4(2分】A.1B.2C.3D.428.下面关于哈希(Hash,杂凑)查找的说法正确的是()【南京理工大学1998一、10(2分]A.哈希函数构造的越复杂越好,因为这样随机性好,冲突小B.除留余数法是所有哈希函数中最好的C.不存在特别好与坏的哈希函数,要视情况而定D.若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可29.若采用链地址法构造散列表,散列函数为H(key)=keyMOD17,则需((1))个链表。这些链的链首指针构成一个指针数组,数组的下标范围为((2))【南京理工大学1999一、12(13)(4分】(1)A.17B.13(2)A.0至17B.1至1730.关于杂凑查找说法不正确的有几个()C.16D.任意C.0至16D.1至16【南京理工大学2000一、16(1.5分】(1)采用链地址法解决冲突时,查找一个元素的时间是相同的(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的(3)用链地址法解决冲突易引起聚集现象(4)再哈希法不易产生聚集A.1B.2C.3D.431.设哈希表长为14,哈希函数是H(key)=key%ll,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是()【南京理工大学2001一、15(1.5分】A.8B.3C.5D.932.假定有k个关键字互为同义词,若用线性探测法把这k个关键字存入散列表中,至少要进行多少次探测?()A.k-1次B.k次C.k+1次D.k(k+l)/2次【中国科技大学1998二、3(2分】【中科院计算所1998二、3(2分)】33.哈希查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行()次探测。【西安电子科技大学1998一、8(2分】A.kB.k+1C.k(k+l)/2D.l+k(k+l)/234.散列函数有一个共同的性质,即函数值应当以()取其值域的每个值。A.最大概率B.最小概率C.平均概率D.同等概率【西安电子科技大学2001应用一、7(2分】【北京邮电大学1999一、4(2分】 17831.散列表的地址区间为0T7,散列函数为H(K)=Kmod17。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。(1)7^59存放在散列表中的【北方交通大学2001-(19,20)(4分】地止是()«D.11D.5)产生冲突。【北京邮电大学2001A.8B.9C.10(2)存放元素59需要搜索的次数是()oA.2B.3C.432.将10个元素散列到100000个单元的哈希表中,则(一、4(2分】A.一定会B.一定不会C.仍可能会二、判断题1.采用线性探测法处理散列时的冲突,当从哈希表删除一个记录时,不应将这个记录的所在位置置空,因为这会影响以后的查找。【长沙铁道学院1998一、3(1分)】2.在散列检索中,“比较”操作一般也是不可避免的。【华南理工大学2001一、4(1分】3.散列函数越复杂越好,因为这样随机性好,冲突概率小.【南京理工大学1997二、5(2分】4.哈希函数的选取平方取中法最好。【青岛大学2000四、7(1分】5.Hash表的平均查找长度与处理冲突的方法无关。【南京航空航天大学1997一、9(1分】6.负载因子(装填因子)是散列表的一个重要参数,它反映散列表的装满程度。【中科院软件所1999六(1-3)(2分】7.散列法的平均检索长度不随表中结点数目的增加而增加,而是随负载因子的增大而增大。【中山大学1994一、8(2分)】8.哈希表的结点中只包含数据元素自身的信息,不包含任何指针。【山东大学2001-、6(1分)】9.若散列表的负载因子a<1,则可避免碰撞的产生。【北京大学1994]10.查找相同结点的效率折半查找总比顺序查找高。【北京邮电大学2002一、8(1分】11.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。【中科院软件所1997一、6(1分】12.在索引顺序表中,实现分块查找,在等概率查找情况下,其平均查找长度不仅与表中元素个数有关,而且与每块中元素个数有关。【上海交通大学1998一、17]13.顺序查找法适用于存储结构为顺序或链接存储的线性表。【山东大学2001一、1(1分)】14.折半查找法的查找速度一定比顺序查找法快o【山东大学2001一、8(1分)】15.就平均查找长度而言,分块查找最小,折半查找次之,顺序查找最大。【西安交通大学1996二、3(3分)】16.对无序表用二分法查找比顺序查找快。【青岛大学2002一、8(1分】17.对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找成功,它们的平均查找长度是相同的,而对于查找失败,它们的平均查找长度是不同的。【上海海运学院1995一、11(1分)1998—>12(1分】18.任一查找树(二叉分类树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间.【上海海运学院1997一、10(1分】19.最佳二叉树是AVL树(平衡二叉树)。【北京大学1994]20.在查找树(二叉树排序树)中插入一个新结点,总是插入到叶结点下面。【上海海运学院1999一、8(1分】21.完全二叉树肯定是平衡二叉树。【南京航空航天大学1996六、5(1分】22.对一棵二叉排序树按前序方法遍历得出的结点序列是从小到大的序列。【南京航空航天大学1995五、4(1分】23.二叉树中除叶结点外,任一结点X,其左子树根结点的值小于该结点(X)的值;其右子树根结点的值》该结点(X)的值,则此二叉树•定是二叉排序树。【北京邮电大学1998一、4(2分】24.有n个数存放在一维数组A[l..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。【北京邮电大学1998一、6(2分】25.N个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的。【上海交通大学1998—、9]26.在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二排序叉树与原二排序叉树相同。【中科院软件所1997]27.设T为一棵平衡树,在其中插入一个结点n,然后立即删除该结点后得到“,则T与「必定相同。 179【上海交通大学1998•、11]9.将线性表中的结点信息组织成平衡的二叉树,其优点之一是总能保证任意检索长度均为logs量级(n为线形表中的结点数目)。【中山大学1994一、9(2分)】10.B-树中所有结点的平衡因子都为零。【大连海事大学2001r(1,17)(1分)】m11.在m阶B-树中每个结点上至少有2个关键字,最多有m个关键字。【东北大学1997二、4(2分)】12.虽然信息项序列的顺序不一样,但依次生成的二叉排序树却是一样的。【长沙铁道学院1998—、9(1分)】13.在9阶B-树中,除叶子以外的任意结点的分支数介于5和9之间。【合肥工业大学2001二、9(1分】14.B-树的插入算法中,通过结点的向上“分裂”,代替了专门的平衡调整。【华南理工大学2001一、3(1分】15.在平衡二叉树中,向某个平衡因子不为零的结点的树中插入一新结点,必引起平衡旋转。【南京理工大学1997二、3(2分】16.二叉排序树删除一个结点后,仍是二叉排序树。【青岛大学2000四、4(1分】17.B+树既能索引查找也能顺序查找。【青岛大学2002—、10(1分】三、填空题1.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为次;当使用监视哨时,若查找失败,则比较关键字的次数为。【华中理工大学2000一、8(2分】2.在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为.【北方交通大学2001二、2]3.在有序表A11..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为。【中国人民大学2001—、2(2分)】4.在有序表A[l..20]中,按二分查找方法进行查找,查找长度为5的元素个数是【合肥工业大学1999三、9(2分】5.高度为4的3阶b-树中,最多有个关键字。【合肥工业大学2000三、9(2分】6.在有序表A[1…20]中,按二分查找方法进行查找,查找长度为4的元素的下标从小到大依次是【合肥工业大学2000三、10(2分】7.给定一组数据{6,2,7,10,3,12}以它构造一棵哈夫曼树,则树高为,带权路径长度WPL的值为.【南京理工大学1997三、4(2分】8.在一棵m阶B-树中,若在某结点中插入一个新关键字而引起该结点分裂,则此结点中原有的关键字的个数是;若在某结点中删除一个关键字而导致结点合并,则该结点中原有的关键字的个数是O【中国科技大学1998一、5(3分)】【南京理工大学2001二、4(3分】9.己知有序表为(12,18,24,35,47,50,62,83,90,115,134)当用二分法查找90时,需一次查找成功,47时——成功,查100时,需——次才能确定不成功。【南京理工大学2000二、7(4.5分】10.哈希表是通过将杳找码按选定的(1)和(2),把结点按查找码转换为地址进行存储的线性表。哈希方法的关键是(3)和(4).一个好的哈希函数其转换地址应尽可能(5),而且函数运算应尽可能(6)。【青岛大学2000六、2(2分】11.平衡二叉树又称,其定义是。【青岛大学2001六、3(3分】12.在哈希函数H(key)=key%p中,p值最好取.【青岛大学2002三、9(2分】13.对于长度为255的表,采用分块查找,每块的最佳长度为。【青岛大学2002三、10(2分】14.在n个记录的有序顺序表中进行折半查找,最大比较次数是。【中国科技大学1998一、4(3分】15.有一个2000项的表,欲采用等分区间顺序查找方法进行查找,则每块的理想长度是(1),分成(2)块最为理想,平均杳找长度是(3)。【中国矿业大学2000一、 1806(3分】16.假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行次探测。【西安电子科技大学2001软件一、7(2分】17.分块检索中,若索引表和各块内均用顺序查找,则有900个元素的线性表分成块最好:若分成25块,其平均查找长度为.【北京工业大学1999一、5(2分)】18.执行顺序查找时,储存方式可以是⑴,二分法查找时,要求线性表(2),分块查找时要求线性表(3),而散列表的查找,要求线性表的存储方式是。【山东大学1998一、1(3分)】19.如果按关键码值递增的顺序依次将关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为.【山东大学1999二、1(4分)】20.如果关键码按值排序,而后用二分法依次检索这些关键码,并把检索中遇到的在二叉树中没有出现的关键码依次插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为。【山东大学1999二、2(4分)】21.平衡因子的定义是【北京轻工业学院2000一、2(2分】22.查找是非数值程序设计的一个重要技术问题,基本上分成(1)查找,(2)查找和(3)查找。处理哈希冲突的方法有(4)、⑸、⑹和⑺。【靴计算机系统工程研究所1999一(5分】23.法构造的哈希函数肯定不会发生冲突。【重庆大学2000一、3]24.具有N个关键字的B树的查找路径长度不会大于。【中科院计算机1999二、2]25.在一棵有N个结点的非平衡二叉树中进行查找,平均时间复杂度的上限(即最坏情况平均时间复杂度)为。【西南交通大学2000一、8]26.假设有n个关键字,它们具有相同的Hash函数值,用线性探测方法解决冲突,把这n个关键字散列到大小为n的地址空间中,共计需要做次插入和探测操作。【武汉大学2000一、8]27.高度为8的平衡二叉树的结点数至少有个。【武汉大学2000一、6]28.高度为5(除叶子层之外)的三阶B-树至少有个结点。【武汉大学20004]29.假定查找有序表A[L.12]中每个元素的概率相等,则进行二分查找时的平均查找长度为【燕山大学2001二、4(3分】30.可以唯一的标识一个记录的关键字称为.【燕山大学1998一、7(1分】31.已知二叉排序树的左右子树均不为空,则上所有结点的值均小于它的根结点信.一上所有结点的值均大于它的根结点的值。【燕山大学1998一、8(2分】32.动态查找表和静态查找表的重要区别在于前者包含有和运算,而后者不包含这两种运算。【厦门大学2001一、3(14%/5分)】33.对于具有144个记录的文件,若采用分块查找法,且每块长度为8,则平均查找长度为【北方交通大学2001二、8]34.127阶B-树中每个结点最多有(1)个关键字:除根结点外所有非终端结点至少有(2)棵子树;65阶B+树中除根结点外所有结点至少有(3)个关键字:最多有(4)棵子树;【北方交通大学1999二、5(4分】35.若静态查找表的类型定义如下:TYPErectype=RECORDkey:keytype;;END;ord1isttp=ARRAY[1..n]OFrectype;请完成以下二分查找的算法:FUNCbinsrch(r:ordlisttp;k:keytype):integer;BEGINlow:=l;hig:=n;sue:=false;WHILE(1)ANDNOT(sue)DO[mid:=(2);CASEk>r[mid].key:low:=mid+l; 181k=r[mid].key:sue:=true;k 182叙述B-树定义,主要用途是什么?它和B+树的主要差异是什么?【青岛大学2001五(5分]B-树【南开大学1996五、4(3分)1998五、4(4分)2000二、2(2)】【啾学2000三(8分)】平衡二叉树(AVL树)?【南开大学1996五、3(3分)1998五、3(4分)】【厦门大学1998四、2(5分)】平衡因子【西北工业大学1999一、2(3分)】平均查找长度(ASL)【西北工业大学1999一、3(3分)】trie树。【中山大学1997一、3(3分】1.回答问题并填空(1)(2分)散列表存储的基本思想是什么?(2)(4分)散列表存储中解决碰撞的基本方法有哪些?其基本思想是什么?(3)(4分)用分离的同义词子表解决碰撞和用结合的同义词表解决碰撞属于哪种基本方法?他们各有何特点?(4)(3分)用线性探查法解决碰撞时,如何处理被删除的结点?为什么?(5)(2分)散列法的平均检索长度不随()的增加而增加,而是随()的增大而增加。【山东工业大学1999四(15分】2.如何衡量hash函数的优劣?简要叙述hash表技术中的冲突概念,并指出三种解决冲突的方法。【南京航空航天大学1996九、2(6分】3.HASH方法的平均查找路长决定于什么?是否与结点个数N有关?处理冲突的方法主要有哪些?【中国人民大学2000—、4(4分)】4.在采用线性探测法处理冲突的散列表中,所有同义词在表中是否一定相邻?【西安电子科技大学2000计应用一、8(5分】5.设有一组关键字{9,01,23,14,55,20,84,27},采用哈希函数:H(key)=keymod7,表长为10,用开放地址法的二次探测再散列方法Hi=(H(key)+di)mod10(di=「,2:3;…,)解决冲突。要求:对该关键字序列构造哈希表,并计算查找成功的平均查找长度。【东北大学2002二、2(5分】6.对下面的关键字集{30,15,21,40,25,26,36,37}若查找表的装填因子为0.8,采用线性探测再散列方法解决冲突,做:(1)设计哈希函数;(2)画出哈希表;(3)计算查找成功和查找失败的平均查找长度;(4)写出将哈希表中某个数据元素删除的算法:【东北大学2001六(18分)】7.设哈希表a、b分别用向量a[0..9],b[0..9]表示,哈希函数均为H(key)=keyMOD7,处理冲突使用开放定址法,Hi=[H(key)+Di]MOD10,在哈希表a中Di用线性探测再散列法,在哈希表b中Di用二次探测再散列法,试将关键字{19,24,10,17,15,38,18,40}分别填入哈希表a,b中,并分别计算出它们的平均查找长度ASL。【北京工业大学1998三(8分)】8.采用哈希函数H(k)=3*kmod13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51(1)构造哈希表(画示意图);(2)装填因子:等概率下(3)成功的和(4)不成功的平均查找长度。【北京工业大学2000三(8分)】9.设一组数据为{1,14,27,29,55,68,10,11,23},现采用的哈希函数是H(key)=keyMOD13,即关键字对13取模,冲突用链地址法解决,设哈希表的大小为13(0..12),试画出插入上述数据后的哈希表。【南京理工大学1996三、3(5分】10.设散列表长度为14,散列函数h(x)4।2其中i为健值中第一个字母在字母表中的序号,若健值的输入顺序为Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,用拉链法处理冲突,要求:(1)构造散列表(2)求出在等概率情况下,查找成功的平均查找长度。【厦门大学2001二、2(24%/3分)】11.常用的构造哈希函数的方法有哪些?若在哈希表中删除一个记录,应如何操作?为什么?已知一组关犍字为(19,14,23,01,68,20,84,27,55,11,10,79)按哈希函数H(Key)=KeyMOD13和线性探测再散列处理冲突的方法在地址空间A[0..15]中构造哈希表。【燕山大学1999八(14分】12.设哈希函数H(k)=3Kmod11,散列地址空间为0〜10,对关键字序列(32,13,49,24,38,21,4,12)按下述两种解决冲突的方法构造哈希表⑴线性探测再散列(2)链地址法,并分别求出等概率下查找成功时和查找失败时的平均查找长度ASLsucc和ASLunsucc。【北方交通大学1998三(18分】13.使用散列函数hashf(x)=xmod11,把一个整数值转换成散列表下标,现要把数据:1,13,12,34,38,33,27,22插入到散列表中。(1)使用线性探查再散列法来构造散列表。(5分)(2) 183使用链地址法构造散列表。(5分)针对这两种情况,确定其装填因子,查找成功所需的平均探查次数,以及查找不成功所需的平均探查次数。(5分)【清华大学1998五(15分】1.已知长度为12的表(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)(1)试按表中元素的顺序依次插入一棵初始为空的分类二叉树,试画出插入完成之后的分类二叉树并计算其在等概率查找情况下,查找成功的平均查找长度。(2)试用以下两种方法构造两个Hash表,Hash函数H(K)=[i/2],其中i为关键字K中第一个字母在字母表中的序号,[x]表示取整数。a.用线性探测开放定址法处理冲突(散列地址空间为0〜16);b.用链地址法处理,然后分别求出这两个Hash表在等概率查找情况下,查找成功的平均查找长度。【上海海运学院1996五(15分】2.设散列函数为H(K)=KMOD13,给定的键值序列为13,41,15,44,06,68,12,25,38,64,19,49,画出用链地址法处理冲突构造得的哈希表。【福州大学1998三、3(6分)】3.设散列函数H(k)=Kmod7,散列表的地址空间为0-6,对关键字序列(32,13,49,18,22,38,21}按链地址法处理冲突的办法构造哈希表,并指出查找各关键字要进行几次比较。【西安电子科技大学1999计应用一、5(5分】4.选取哈希函数H(key)=keymod7,用链地址法解决冲突。试在0-6的散列地址空间内对关键字序列{31,23,17,27,19,11,13,91,61,41)构造哈希表,并计算在等概率下成功查找的平均查找长度。【大连海事大学2001八(10分)】5.设散列函数为H(K)=KMOD11,解决冲突的方法为链呼,试将下列关键字集合{35,67,42,21,29,86,95,47,50,36,91}依次插入到散列表中(画出散列表的示意图)。并计算平均查找长度ASL。【首都经贸大学1997三(10分】6.已知散列表的地址空间为A[0..11],散列函数H(k)=kmod11,采用线性探测法处理冲突。请将下列数据{25,16,38,47,79,82,51,39,89,151,231}依次插入到散列表中,并计算出在等概率情况下查找成功时的平均查找长度。【合肥工业大学2000四、3(5分】7.设输入的关键字序列为:22,41,53,33,46,30,13,01,67,Hash函数为:H(key)=keyMODHoHASH表长度为11。试用线性探测法解决冲突,将各关键字按输入顺序填入Hash表中。【南京航空航天大学1998二(10分】8.设哈希(Hash)表的地址范围为。〜17,哈希函数为:H(K)=KMOD16,K为关键字,用线性探测再散列法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49)造出哈希表,试回答下列问题:(1)画出哈希表示意图;(2)若查找关键字63,需要依次与哪些关键字比较?(3)若查找关键字60,需要依次与哪些关键字比较?(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。【华中理工大学1999三(10分】9.试为下列关键字设计哈希表,要求所设计的表在查找成功时的平均查找长度不超过2.0o并请验证你造的哈希表的实际平均查找长度是否满足要求。(CHA,CAI,LAN,WEN,LONG,ZHAO,WU,LIU,CHEN,LI,WANG,CAO,YUN,CHANG,YANG)【清华大学1996五】24.设a,b,c,d,e五个字符的编码分别为1,2,3,4,5,并设标识符依以下次序出现:ac,bd,aa,be,ab,ad,cd,be,ae,ceo要求用哈希(Hash)方法将它们存入具有10个位置的表中。(1)将上述关键字(标识符)构造一个哈希函数,使得发生冲突尽可能地少;(2)线性探测再散列法解决冲突。写出上述各关键字在表中位置。【南开大学1998六(10分)】25.对以下关键字序列建立哈希表:(SUN,MON,TUE,WED,THU,FRI,SAT),哈希函数为H(K)=(关键字中第一个字母在字母表中的序号)MOD7,用线性探测法处理冲突,求构造一个装填因子为0.7的哈希表;并分别计算出在等概率情况下查找成功与不成功的平均查找长度。【西北大学2000二、3(5分)】26.设散列表为HT[0..12],即表的大小为m=13。现采用双散列法解决冲突。散列函数和再散列函数分别为:Ho(key)=key%13;注:%是求余数运算(=mod)H.=(Hi,+REV(key+l)%ll+l)%13;i=l,2,3,…,nrl其中,函数REV(x)表示颠倒10进制数x的各位,如REV(37)=73,REV(7)=7等。若插入的关键码序列为(2,8,31,20,19,18,53,27).(1)(8分)试画出插入这8个关键码后的散列表;(2)(5分)计算搜索成功的平均搜索长度ASL【清华大学2000八(13分)27.设一个散列表含hashsize=13个表项,其下标从。到12,采用线性探查法解决冲突。请按以下要求,将关键码{10,100,32,45,58,126,3,29,200,400,0}散列到表中。 184(1)散列函数采用除留余数法,用%hashsize(取余运算)将各关键码映像到表中,请指出每一个产生冲突的关键码可能产生多少次冲突。(7分)(2)散列函数采用先将关键码各位数字折叠相加,再用%hashsize将相加的结果映像到表中的办法。请指出每一个产生冲突的关键字码可能产生多少次冲突。【清华大学2001五(15分)24.已知一组关键字为(26,36,41,38,44,15,68,12,06,51,25),用链地址法解决冲突。假设装填因子a=0.75,散列函数的形式为H(K)=KMODP,回答下列问题:(1)构造出散列函数;(3分)(2)计算出等概率情况下查找成功的平均查找长度:(3分)(3)计算出等概率情况下查找失败的平均查找长度;(3分”东北大学1999一、3(共9分)】25.在B-树和B+树中查找关键字时,有什么不同?【东北大学2002・、5(2分)】26.简要叙述B树(有些教材中称为B-树)与B+树的区别?【南京航空航天大学1999六(5分】27.包括n个关键码的m阶B-树在一次检索中最多涉及多少个结点?(要求写出推导过程。)【北京大学1997五、2(6分】28.给定关键码序列(26,25,20,33,21,24,45,204,42,38,29,31),要用散列法进行存储,规定负载因子a=0.6。(1)请给出除余法的散列函数。(2)用开地址线性探测法解决碰撞,请画出插入所有的关键码后得到的散列表,并指出发生碰撞的次数。【北京大学1997三(6分】29.已知记录关键字集合为(53,17,19,61,98,75,79,63,46,49)要求散列到地址区间(100,101,102,103,104,105,106,107,108,109)内,若产生冲突用开型寻址法的线性探测法解决。要求写出选用的散列函数;形成的散列表;计算出查找成功时平均查找长度与查找不成功的平均查找长度•(设等概率情况)【东北大学1998—、2(10分)】30.设有一棵空的3阶B-树,依次插入关键字30,20,10,40,80,58,47,50,29,22,56,98,99,请画出该树。【华南理工大学2001一、5(4分】31.设依以下次序给出关键字:34,16,19,21,5,49,24,62,3,17,45,8,构造3阶B-树。要求从空树开始,每插入一个关键字,画出一个树形。【南开大学1997六(10分)】32.高度为h的m阶B树至少有多少个结点?【西安电子科技大学2000软件一、6(5分】33.对下面的3阶B-树,依次执行下列操作,画出各步操作的结果。【合肥工业大学1999四、3(5分】(1)插入90(2)插入25(3)插入45(4)删除60(5)删除80354034.已知2棵2-3B-树如下(省略外结点):【吉林大学1999一、4(4分)】(1)对树(a),请分别画出先后插入26,85两个新结点后的树形;(2)对树(b),请分别画出先后删除53,37两个结点后的树形。3037 18539.四阶B树中(如图所示),插入关键字87,试画出插入调整后树的形状【东南大学1999五(15分】40.下图是5阶B树,画出删去P后的B树,再画出删去D后的B树。【厦门大学2000二、2(20/3分)】41.满二叉检索树符合B树定义吗?B树的插入和删除算法适用于满二叉检索树吗?为何?【东南大学1995五(6分】42.设有关键码序列10,20,35,40,44,51,65,70,85,91,93,95。试按照最大关键码复写原则绘出相应的2阶B+树。【山东工业大学1996二、1(6分】43.在--棵B+树上一般可进行那两种方式的查找运算?【北京科技大学2001一、8(2分】44.含9个叶子结点的3阶B-树中至少有多少个非叶子结点?含10个叶子结点的3阶B-树中至多有多少个非叶子结点?【北京轻工业学院2000八(10分】45.直接在二叉排序树中查找关键字K与在中序遍历输出的有序序列中查找关键字K,酸率是否相同?输入关键字有序序列来构造一棵二叉排序树,然后对此树进行查找,其效率如何?为什么?【长沙铁道学院1997三、4(3分)】46.一棵二叉排序树结构如下,各结点的值从小到大依次为1-9,请标出各结点的值。【厦门大学2002八、2(5分)】47.已知长度为11的表(xal,wan,wil,zol,yo,xul,yum,wen,wim,zi,yon),按表中元素顺序依次插入一棵初始为空的平衡二叉排序树,画出插入完成后的平衡二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。【山东大学2001七(7分)】48.用序列(46,88,45,39,70,58,101,10,66,34) 186建立一个排序二叉树,画出该树,并求在等概率情况下查找成功的平均查找长度.【北京邮电大学1999七(10分】40.依次输入表(30,15,28,20,24,10,12,68,35,50,46,55)中的元素,生成一棵二叉排序树【华中理工大学2000五(10分】(1)试画出生成之后的二叉排序树;(2)对该二叉排序树作中序遍历,试写出遍历序列;(3)假定每个元素的查找概率相等,试计算该二叉排序树的平均查找长度。41.已知关键字序列1?={11,4,3,2,17,30,19},请按算法步骤:【北方交通大学1996四】(1)构造一棵哈夫曼树,并计算出它的带权路径长度WPL(7分)(2)构造一棵二叉排序树,如果对每个关键字的查找概率相同,求查找成功时的平均查找长度ASL。(8分)42.输入一个正整数序列(53,17,12,66,58,70,87,25,56,60),试完成下列各题。(1)按次序构造一棵二叉排序树BS。(2)依此二叉排序树,如何得到一个从大到小的有序序列?(2)画出在此二叉排序树中删除“66”后的树结构。【同济大学2001•(10分)】52.设二叉排序树中关键字由1到1000的整数组成,现要查找关键字为363的结点,下述关键字序列哪一个不可能是在二叉排序树中查到的序列?说明原因。【东北大学2002一、3(4分)】(1)51,250,501,390,320,340,382,363(2)24,877,125,342,501,623,421,36353.用关键字1,2,3,4的四个结点(1)能构造出几种不同的二叉排序树?其中(2)最优查找树有几种?(3)AVL树有几种?(4)完全二叉树有几种?试画出这些二叉排序树。【北京工业大学1997二、3(5分)】类似本题的另外叙述有:(1)设有关键字A、B、C和D,依照不同的输入顺序,共可能组成多少不同的二叉排序树。请画出其中高度较小的6种。【北京大学1995]54.一棵具有m层的AVL树至少有多少个结点,最多有多少个结点?【浙江大学1995六(8分)】55.设T是一棵高度平衡树(又称平衡树),给定关键词K,如果在T中查找K失败,且查找路径上的任一结点的平衡系数皆为零,试回答用高度平衡树插入算法在T中插入关键词为K的新结点后,树T的高度是否一定增加?并回答为什么。【吉林大学1996四、2】56.设二叉树HT是一棵高度平衡树,当使用二叉查找与插入算法插入一个新的结点时,该操作可能会破坏HT的平衡性。试列举出可能破坏HT的平衡性的所有情况,并论证你的结论的正确性(即要证明你所列举的情况恰好是可能破坏HT的平衡性的所有情况)【吉林大学1998四1997六(14分))57.按下述次序输入关键字:e,i,p,k,,m,l,b,试画出AVL树的构造与调整过程。(要求画出每插入一个关键字检索树的形状及调整后的结果)。【山东大学1992一、5(3分)】58.已知一棵高度平衡树如下,其中各结点间大小关系(中根次序)按字典序排列,请画出插入结点JUN后,该二叉树经平衡过程而形成的树形,并说明采用何种转动方式,标出平衡后树中各结点的平衡系数。【吉林大学1999一、1(4分)】59.已知长度为12的表{Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec}(1)试按表中元素的次序依次插入一棵初始为空的二叉排序树,请画出插入之后的二叉排序树,并求在等概率情况下查找成功的平均查找长度。(2)若对表中元素先进行排序构成有序表,求在等概率的情况下对此表进行折半查找成功的平均查找长度。(3)按表中元素顺序构造一棵AVL树,并求其在等概率情况下查找成功的平均查找长度。【中国矿业大学2000七(10分】60.试画出从空树开始,由字符序列(3<1,6,5,11,8,1),11,2,1<,1',。构成的二叉平衡树,并为每一次的平衡处理指明旋转类型。【清华大学1994三(10分】61.给定关键词输入序列{CAP,AQU,PIS,ARI,TAU,GEM,CAN,LIB,VIR,LEO,SCO},假定关键词比较按英文字典序,(1)试画出从一棵空树开始,依上述顺序(从左到右)输入关键词,用高度平衡树的查找和插入算法生成一棵高度平衡树的过程,并说明生成过程中采用了何种转动方式进行平衡调整,标出树中各结点的平衡系数。 187(2)试画出在上述生成的高度平衡树中,用高度平衡树的删除算法先后删除结点CAN和AQU后的树形,要求删除后的树形仍为一棵高度平衡树,并说明删除过程中采用了何种转动方式进行平衡调整,标出树中各结点的平衡系数。【吉林大学2000—、5(6分)】53.如图2所示是一棵正在进行插入运算的AVL树,关键码70的插入使它失去平衡,按照AVL树的插入方法,需要对它的结构进行调整以恢复平衡。(1)请画出调整后的AVL树。(2)假设AVL树用llink-rlink法存储,t是指向根结点的指针,请用Pascal(或C)语句表示出这个调整过程。(说明:不必写出完整的程序,只需用几个语句表示出在本题中所给出的具体情况下调整过程中指针的变化。在调整过程中还有两个指针变量P和q可以使用。)[北京大学1997六(10分】54.若以序列{Thu,Tue,Wed,Last,Fri,Sat,Mon,Sun,Next)作为输入序列(1)按算法AVL-INSERT构造均高树,画出构造过程和进行平衡转换的类型。(2)若均高树中有n个结点,其高度为h,指出在最坏情况下,对该树的插入、删除和依次输出操作的时间复杂性。【东南大学1992五(18分】55.在数轴上有N个彼此相临不交的区间,每个区间下界上界都是整数。N个区间顺序为1-N„要查找给定的X落入的区间号,您认为应怎样组织数据结构,选择什么方法最快,简述原因。【西北大学2000二、4(5分)】56.有一个长度为12的有序表,按对半查找法对该表进行查找,在表内各元素等概率情况下,查找成功所需的平均比较次数是多少?【吉林大学2001—、1(3分)】57.若对一个线性表进行折半查找,该线性表应满足什么条件?【北京航空航天大学1998一、8(4分】58.在查找和排序算法中,监视哨的作用是什么?【长沙铁道学院1997三、3(3分)】68.长度为255的有序表采用分块查找,块的大小应取多少?【首都经贸大学1997一、1(4分】69.用分块查找法,有2000项的表分成多少块最理想?每块的理想长度是多少?若每块长度为25,平均查找长度是多少?【厦门大学1999三、2]70.设有n个值不同的元素存于顺序结构中,试问:你能否用比(2n-3)少的比较次数选出这n个元素中的最大值和最小值?若能,请说明是如何实现的:在最坏情况下,至少要进行多少次比较。【西安电子科技大学1996四(10分】71.对有14个元素的有序表A[1…14]作折半查找,当比较到A[4]时算法结束。被比较元素除A[4]外,还有哪几个?【燕山大学2000一、2(1分】72.解答下面的问题(1)画出在递增有序表A[L.21]中进行折半查找的判定树。(2)当实现插入排序过程时,可以用折半查找来确定第I个元素在前1-1个元素中的可能插入位置,这样做能否改善插入排序的时间复杂度?为什么?(3)折半查找的平均查找长度是多少?【西安电子科技大学2000计应用八(10分】73.设有一组数据black,blue,green,purple,red,white,yellow,它们的查找概率分别为0.10,0.08,0.12,0.05,0.20,0.25,0.20»试以它们的查找概率为权值,构造一棵次优查找树,并计算其查找成功的平均查找长度。【清华大学1997七(12分】74.假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:(1).画出描述折半查找过程的判定树;(2).若查找元素54,需依次与那些元素比较?(3).若查找元素90,需依次与那些元素比较?(4).假定每个元素的查找概率相等,求查找成功时的平均查找长度。【华中理工大学1999二(10分)]75.在分析二叉查找树性能时常加入失败结点,即外结点,从而形成扩充的二叉树。若设失败结点i所在层次为L,, 188那么查找失败到达失败结点时所作的数据比较次数是多少?【清华大学1999一、4(2分】74.设有五个数据do,for,if,repeat,while,它们排在一个有序表中,其查找概率分别为pi=0.2,p2=0.15,p3=0.1,p4=0.03,ps=0.01o而查找它们之间不存在数据的概率分别为q0=0.2,ql=0.15,q2=0.1,q3=0.03,q4=0.02,q5=0.OUdoforifrepeatwhileqopiqiP2q2P3q3p4q4psqs(1)试画出对该有序表采用顺序查找时的判定树和采用折半查找时的判定树。(6分)(2)分别计算顺序查找时的查找成功和不成功的平均查找长度,以及折半查找时的查找成功和不成功的平均查找长度。(4分)(3)判定是顺序查找好?还是折半查找好?(2分)【清华大学1999年二(12分】75.顺序检索,二分检索,哈希(散列)检索的时间分别为0(n),0(logzn),0(l)。既然有了高效的检索方法,为什么低效的方法还不放弃?【北京邮电大学1993一、2(5分)】五、算法设计题1.请编写•个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink-rlink法存储。【北京大学1998三、2(5分】类似本题的另外叙述有:(1)试写一个判别给定二叉树是否为二叉排序树的算法。【中山大学1994五(12分)】(2)某二叉树采用链接存储,其结点结构是:(1c,data,rc)。1c和rc分别是指向左子树根和右子树根的指针域。data为结点数据域。试写出判断该二叉树是否为二叉排序树的算法(不许另设空间,但可以设一些辅助指针)。设二叉排序树左子树每个结点值〈根结点值,右子树每个结点的值2根结点的值。二叉树是递归定义的。按此定义写出判断某二叉树是否为二叉排序树的算法。【北京邮电大学1993四(20分】(3)编写判定给定的二叉树是否是二叉排序树的函数。【南京大学2000]2.某个任务的数据模型可以抽象为给定的K个集合:SI,S2,…,Sko其中Si(l<=i<=k)中的元素个数不定。在处理数据过程中将会涉及到元素的查找和新元素的插入两种操作,查找和插入时用一个二元组(i,x)来规定一个元素,i是集合的序号,x是元素值。设计一种恰当的数据结构来存储这k个集合的元素,并能高效的实现所要求的查找和插入技^作o(1)借助Pascal的数据类型来构造和描述你所选定的数据结构,并且说明选择的理由;(2)若一组数据模型为Sl={10.2,1.7,4.8,16.2},S2={1.7,8.4,0.5},S3={4.8,4.2,3.6,2.7,5.1,3.9),待插入的元素二元组为(2,11.2)和(1,5.3),按你的设计思想画出插入元素前后的数据结构状态。【北京工业大学1995七(20分)】3.假设K1,…,Kn是n个关键词,试解答:(1)试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,Kn时,用算法建立一棵以LLINK/RLINK链接表示的二叉查找树。(2)设计一个算法,打印出该二叉查找树的嵌套括号表示结构。例如,K1=B,K2=A,K3=D,K4=C,K5=E,则用二叉查找树的插入算法建立的二叉查找树为:该二叉查找树的嵌套括号表示结构为:B(A,D(C,E))【吉林大学1995六(14分)】4.写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。用类PASCAL(或C)语言将上述算法写为过程形式。【南开大学1998七(16分)】5.已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子,试编写算法,删除P所指结点。【北京轻工业学院1998五(12分】6.二叉排序树采用二叉链表存储。写一个算法,删除结点值是X的结点。要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。【中科院软件所1999七、1(8分】7.设记录RI,R2,…,Rn按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+8;试写一查找给定关键字k的算法;并 189画出此查找过程的判定树,求出在等概率情况下查找成功时的平均查找长度。【武汉交通科技大学1996四、2(16分)】3.试编写算法,在根结点指针为t的m-阶B树上查找关键字k,返回记录(pt,i,tag).若查找成功,则特征位tag=l,等于k的关键字即为指针pt所指结点中的第i个关键字;若查找不成功,则特征位tag=0,等于k的关键字应插入到指针pt所指结点中第i个和第i+1个关键字之间。简化B-树存储结构如下所示:typemblink=tmbnodembnode=recordkeynum:integer;parent:mblink;key:array[1..m]ofkeytp{关键字}ptr:array[0..m]ofmb1inkend;result=recordpt:mblink;i:integer;tag:(0..1)end;(注:所用语言C,PASCAL等都可使用编制算法。若算法不用类PASCAL描述,要给出相应语言的结构描述。题目中给出的结构说明可供参考,也可自行给出)【北京轻工业学院1997八(10分】4.元素集合已存入整型数组A[l..n]中,试写出依次取A中各值A[i](K=i<=n)构造一棵二叉排序树T的非递归算法:CSBT(T,A)【北京科技大学2000八、2]5.给出折半查找的递归算法,并给出算法时间复杂度性分析。【河南大学1998五(5分】类似本题的另外叙述有:(1)写出折半查找的算法,并要求它返回整型值i.当查找成功时,返回查找位置,查找不成功时返回0。【山东师范大学2000二、3(12分)2001二、4(10分】6.请用类C或用类PASCAL语言编写算法:键树,又称数字查找树。它是一棵度为>=2的树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。编写一个在键(TIRE)树T上查找关键字等于给定值KEY的记录的算法。若查找成功,返回指向该记录的指针;否则返回空指针。【上海大学2002七、2(10分】7.写出从哈希表中删除关键字为K的一个记录的算法,设哈希函数为H,解决冲突的方法为链地址法。【上海交通大学1999五(12分)】8.用PASCAL或C编写一用链接表(LINKEDLIST)解决冲突的哈希表插入函数。【浙江大学1996七(8分)】9.在用除余法作为散列函数、线性探测解决冲突的散列表中,写一删除关键字的算法,要求将所有可以前移的元素前移去填充被删除的空位,以保证探测序列不致于断裂。【中科院计算所2000八(15分】10.设排序二叉树中结点的结构为下述三个域构成:data:给出结点数据的值:left:给出本结点的左儿子结点的地址;right:给出本结点的右儿子结点的地址设data域为正整数,该二叉树树根结点地址为T。现给出一个正整数X。请编写非递归程序,实现将data域的值小于等于x的结点全部删除掉。【上海交通大学2000十一(12分)】11.已知二叉树T的结点形式为(llink,data,count,rlink,),在树中查找值为X的结点,若找到,则记数(count)加1;否则,作为一个新结点插入树中,插入后仍为二叉排序树,写出其非递归算法。【中山大学1999数三(10分)】12.假设一棵平衡二叉树的每个结点都标明了平衡因子b,试设计一个算法,求平衡二叉树的高度。【燕山大学2001四、3(8分】13.设从键盘输入一个整数的序列:n,al,a2,…,an,其中n表示连续输入整数的个数。(10分。(1)试编写一程序按整数值建立一个二叉排序树(单考生做)。(2)在(1)基础上将此二叉树上的各整数按降序写入一磁盘文件中(统考生做)。【南京航空航天大学1998十(10分】14.设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非 190递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。【北方交通大学1998七(20分】3.在单链表中,每个结点含有5个正整型的数据元素若(最后一个结点的数据元素不满5个,以值0充),试编写一算法查找值为n(n>0)的数据元素所在的结点指针以及在该结点中的序号,若链表中不存在该数据元素则返回空指针。【北京邮电大学2001五、1(10分】4.编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,又查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。【清华大学1995七(20分】5.在二叉排序树的结构中,有些数据元素值可能是相同的,设计一个算法实现按递增有序打印结点的数据域,要求相同的数据元素仅输出一个,算法还应能报出最后被滤掉,而未输出的数据元素个数,对如图所示的二叉排序树,输出为:10,12,13,15,18,21,(IchiId,data,rchild),期IchiId,rchiId分别指向该结点左、右孩子的指针(当孩子结点不存在时,相应指针域为null),data域存放结点的数据信息。请写出递归算法,从小到大输出二叉排序树中所有数据值>=x的结点的数据。要求先找到第一个满足条件的结点后再依次输出其他满足条件的结点。【北京航空航天大学1996】24.设二叉排序树的存储结构为:TYPEtree—node;node=REC0RDkey:keytype;size:int;Ichild,rchiId,parents:tree;END;22/11()/412/17/2■T1/4一个结点x'的size域的值是以该结点为根的子树中结点的总数(包括X、本身)。例如,下图中x所指结点的sixe值为4。设树高为h,试写一时间为0(h)的算法Rank(T:tree;x:%ode)返回x所指结点在二叉排序树T的中序序列里的排序序号,即:求X-结点是根为T的二叉排序树中第几个最小元素。例如,下图x所指结点是树T中第11个最小元素。(提示:你可利用size值和双亲指针parents)【中科院软件所1997四(12分)】【中国科学技术大学1997】25.己希表HT的装填因子小于1,哈希函数H(key)为关键字的第一个字母在字母表中的序号。(1)处理冲突的方法为线性探测开放地址法。编写一个按第一个字母的顺序输出哈希表中所有关键字的程序。(2)处理冲突的方法为链地址法。编写一个计算在等概率情况下查找不成功的平均查找长度的算法。注意,此算法中规定不能用公式直接求解计算。【西北大学2001]26.有一个100*100的稀疏矩阵,其中1%的元素为非零元素,现要求用哈希表作存储结构。(1)请你设计一个哈希表(2)请写一个对你所设计的哈希表中给定行值和列值存取矩阵元素的算法;并 191对你的算法所需时间和用一维数组(每个分量存放一个非零元素的行值,列值,和元素值)作存储结构时存取元素的算法(注:此算法不需要写出,仅需说明存取的方法和所用时间)进行比较。【北方交通大学1994六(16分】24.将一组数据元素按哈希函数H(key)散列到哈希表HT(0:m)中,用线性探测法处理冲突(H(key)+1、H(key)+2、…、H(key)-1),假设空单元用EMPTY表示,删除操作是将哈希表中结点标志位从INUSE标记为DELETED,试写出该散列表的查找、插入和删除三个基本操作算法。【北京邮电大学2001五、2(10分】25.设给定关键字输入序列为(100,90,120,60,78,35,42,31,15)用散列法散列0-10的地址区间。要求设计一合理的散列函数;冲突时用链表法解决,写出散列算法,并构造出散列表,在等概率查找情况下查找成功的平均查找长度是多少?【东北大学1996四(12分)】类似本题的另外叙述有:(1)已知输入关键字序列为(100,90,120,60,78,35,42,31,15)地址区间为0-11.设计一个哈希表函数把上述关键字散到0〜11中,画出散列表(冲突用线性探测法);写出查找算法,计算在等概率情况下查找成功的平均查找长度。【东北大学1997五(15分)】26.已知顺序表中有m个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到0(m).【清华大学1994八(15分】 192第10章排序一、选择题1.某内排序方法的稳定性是指()»【南京理工大学1997一、10(2分】A.该排序算法不允许有相同的关键字记录B.该排序算法允许有相同的关键字记录C.平均时间为0(nlogn)的排序方法D.以上都不对2.下面给出的四种排序法中()排序法是不稳定性排序法。【北京航空航天大学1999一、10(2分】A.插入B.冒泡C.二路归并D.堆积3.下列排序算法中,其中()是稳定的。【福州大学1998•、3(2分)】A.堆排序,冒泡排序B.快速排序,堆排序C.直接选择排序,归并排序D.归并排序,冒泡排序4.稳定的排序方法是()【北方交通大学2000二、3(2分】A.直接插入排序和快速排序B.折半插入排序和起泡排序C.简单选择排序和四路归并排序D.树形选择排序和shell排序5.下列排序方法中,哪一个是稳定的排序方法?()【北方交通大学2001一、8(2分】A.直接选择排序B.二分法插入排序C.希尔排序D.快速排序6.若要求尽可能快地对序列进行稳定的排序,则应选(A.快速排序B.归并排序C.冒泡排序)。【北京邮电大学2001一、5(2分】7.如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。()就是不稳定的排序方法。【清华大学1998一、3(2分】A.起泡排序B.归并排序C.Shell排序D.直接插入排序E.简单选择排序8.若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选()排序为宜。A.直接插入B.直接选择C.堆D.快速E.基数【中科院计算所2000一、5(2分)】9.若需在OGilogm)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()oA.快速排序B.堆排序C.归并排序D.直接插入排序【中国科技大学1998二、4(2分】【中科院计算所1998二、4(2分)】10.下面的排序算法中,不稳定的是()【北京工业大学1999一、2(2分)】A.起泡排序B.折半插入排序C.简单选择排序D.希尔排序E.基数排序F.堆排序。11.下列内部排序算法中:【北京工业大学2000一、1(10分每问2分)】A.快速排序B.直接插入排序C.二路归并排序D.简单选择排序E.起泡排序F.堆排序(1)其比较次数与序列初态无关的算法是()(2)不稳定的排序算法是()(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k«n)的情况下,排序效率最高的算法是()(4)排序的平均时间复杂度为0(n・logn)的算法是()为0(n・n)的算法是()12.排序趟数与序列的原始状态有关的排序方法是()排序法。【北京航空航天大学1999一、9(2分】A.插入B.选择C.冒泡D.快速 19312.下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是。()A.选择排序法B.插入排序法C.快速排序法D.堆积排序法【北京航空航天大学2000一、10(2分】14.对下列四种排序方法,在排序中关键字比较次数同记录初始排列无关的是()。A.直接插入B.二分法插入C.快速排序D.归并排序【南京理工大学2000一、7(1.5分】15.在下列排序算法中,哪一个算法的时间复杂度与初始排序无关()。【北京理工大学2001六、4(2)]A.直接插入排序B.气泡排序C.快速排序D.直接选择排序16.比较次数与排序的初始状态无关的排序方法是()。【北方交通大学2000二、2(2分】A.直接插入排序B.起泡排序C.快速排序D.简单选择排序17.数据序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中的()的两趟排序后的结果。A.选择排序B.冒泡排序C.插入排序D.堆排序【合肥工业大学1999一、3(2分】18.数据序列(2,1,4,9,8,10,6,20)只能是下列排序算法中的()的两趟排序后的结果。A.快速排序B.冒泡排序C.选择排序D.插入排序【合肥工业大学2000一、3(2分】19.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)8447251521(2)1547258421(3)1521258447(4)1521254784则采用的排序是()o【南京理工大学1997一、2(2分】A.选择B.冒泡C.快速D.插入20.对序列序5,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15);则采用的是()排序。【南京理工大学1998一、8(2分】A.选择B.快速C.希尔D.冒泡21.若上题的数据经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是()排序。A.选择B.堆C.直接插入D.冒泡【南京理工大学1998一、9(2分】22.下列排序算法中()不能保证每趟排序至少能将一个元素放到其最终的位置上。A.快速排序B.shell排序C.堆排序D.冒泡排序【合肥工业大学2001一、3(2分]23.下列排序算法中()排序在一趟结束后不一定能选出一个元素放在其最终位置上。A.选择B.冒泡C.归并D.堆【南京理工大学2001一、7(1.5分)】【哈尔滨工业大学2001二、4(2分】24.下列序列中,()是执行第一趟快速排序后所得的序列。【福州大学1998一、9(2分)】A.[68,11,18,69][23,93,73]B.[68,11,69,23][18,93,73]C.[93,73][68,11,69,23,18]D.[68,11,69,23,18][93,73]25.有一组数据(15,9,7,8,20,-1,7,4)用快速排序的划分方法进行一趟划分后数据的排序为()(按递增序)。【南京理工大学1996一、4(2分】A.下面的B,C,D都不对。B.9,7,8,4,-1,7,15,20C.20,15,8,9,7,-1,4,7D.9,4,7,8,7,-1,15,2026.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。【燕山大学2001—、4(2分】 194A.(38,40,46,56,79,84)B.(40,38,46,79,56,84)C.(40,38,46,56,79,84)D.(40,38,46,84,56,79)27.在下面的排序方法中,辅助空间为0(n)的是()。【南京理工大学1999一、17(1分】A.希尔排序B.堆排序C.选择排序D.归并排序28.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是()排序。A.冒泡B.希尔C.快速D.堆【南京理工大学200112(1.5分】29.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:()。A.直接插入排序B.快速排序C.直接选择排序D.堆排序30.对初始状态为递增序列的表按递增顺序排序,最省时间的是()算法,最费时间的是()算法。A.堆排序B.快速排序C.插入排序D.归并排序【南开大学2000一、5]31.就平均性能而言,目前最好的内排序方法是()排序法。【西安电子科技大学1998一、9(2分】A.冒泡B.希尔插入C.交换D.快速32.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快。A.起泡排序B.快速排列C.Shell排序D.堆排序E.简单选择排序【清华大学1998一、2(2分】类似本题的另外叙述有:(1)设有5000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中()最好?为什么?【山东工业大学1995二、4(3分】A.快速排序B.堆排序C.归并排序D.基数排序E.SHELL排序(2)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用()算法最节省时间。A.堆排序B.希尔排序C.快速排序D.直接选择排序【北京理工大学2000一、5(2分](3)设有1000个无序的元素,希望用最快的速度挑选出其中前十个最大的元素,在以下的排序方法中采用哪一种最好?()【东北大学1999一、5(3分)】A.快速排序B.归并排序C.堆排序D.基数排序E.shell排序33.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是()A.直接插入排序B.冒泡排序C.简单选择排序【山东工业大学1995二、1(2分】类似本题的另外叙述有:(1)在文件"局部有序”或文件长度较小的情况下,最佳内部排序的方法是().A.直接插入排序B.冒泡排序C.简单选择排序D.快速排序【山东大学2001二、2(1分)】(2)在待排序的元素序列基本有序的前提下,效率最高的排序方法是()»【武汉大学2000二、6】A.插入排序B.选择排序C.快速排序D.归并排序34.下列排序算法中,()算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。【南开大学2000一、4]【西北大学2001二、1】A.堆排序B.冒泡排序C.快速排序D.插入排序35.下列排序算法中,占用辅助空间最多的是:()【厦门大学2002五、2(8分)】A.归并排序B.快速排序C.希尔排序D.堆排序36.从未排序序列中依次取出一个元 195素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为()排序法。【北京航空航天大学1999一、8(2分]A.插入B.选择C.希尔D.二路归并34.在排序算法中,每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾,该排序方法是()。【中山大学1999一、11]A.选择B.冒泡C.插入D.堆35.用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是(A.94,32,40,90,80,46,21,69B.32,40,21,46,69,94,90,80C.21,32,46,40,80,69,90,94D.90,69,80,46,21,32,94,40【北方交通大学2001一、15(2分】36.直接插入排序在最好情况下的时间复杂度为()【北京邮电大学1999一、5(2分】A.O(logn)B.0(n)C.0(n*logn)D.0(n2)37.若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行()次比较。A.3B.10C.15D.25【南京理工大学1999一、11(4分】类似本题的另外叙述有:(1)若用冒泡排序对关键字序列{18,16,14,12,10,8},进行从小到大的排序,所需进行的关键字比较总次数是()【北京工商大学2001—、4(3分】A.10B.15C.21D.3438.采用简单选择排序,比较次数与移动次数分别为()。【南京理工大学2000一、18(1.5分】A.0(n),0(logn)B.O(logn),0(n*n)C.0(n*n),0(n)D.0(nlogn),0(n)42.对序列{15,9,7,8,20,-1,4,}用希尔排序方法排序,经一趟后序列变为{15,-1,4,8,20,9,7)则该次采用的增量是()【南京理工大学1999一、15(1分】A.1B.4C.3D.243.对下列关键字序列用快速排序法进行排序时,速度最快的情形是()«A.{21,25,5,17,9,23,30}B.{25,23,30,17,21,5,9}C.{21,9,17,30,25,23,5}D.{5,9,17,21,23,25,30}【北方交通大学2001—、18(2分144.对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为()«A.(2,5,12,16)26(60,32,72)B.(5,16,2,12)28(60,32,72)C.(2,16,12,5)28(60,32,72)D.(5,16,2,12)28(32,60,72)【青岛大学2000三、4(2分】45.对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是()A.每次分区后,先处理较短的部分B.每次分区后,先处理较长的部分C.与算法每次分区后的处理顺序无关D.以上三者都不对【北方交通大学2000二、5(2分】46.当n个整型数据是有序时,对这n个数据用快速排序算法排序,则时间复杂度是(6),当用递归算法求n!时,算法的时间复杂度是(7),则(6)-(7)-()【南京理工大学1999T(6-7)(4分】A.0(n)B.O(nlogn)C.0(n*n)D.O(logn)47.快速排序在最坏情况下的时间复杂度是(),比()的性能差。A.O(NlogN)B.0(N2)C.0(N3)D.堆排序E.冒泡排序F.选择排序【山东工业大学1995二、2(4分】48.快速排序方法在()情况下最不利于发挥其长处。【燕山大学2001一、3(2分】 196A.要排序的数据量太大B.要排序的数据中含有多个相同值C.要排序的数据个数为奇数D.要排序的数据已基本有序46.在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在()位置上。A.Ln/2jB.Ln/2j-1C.1D.|_n/2」+2【中科院计算所2000•,4(2分)】47.以下序列不是堆的是(八【西安电子科技大学2001应用一、5(2分】A.(100,85,98,77,80,60,82,40,20,10,66)B.(100,98,85,82,80,77,66,60,40,20,10)C.(10,20,40,60,66,77,80,82,85,98,100)D.(100,85,40,77,80,60,66,98,82,10,20)48.下列四个序列中,哪一个是堆()。【北京工商大学2001一、8(3分】A.75,65,30,15,25,45,20,10B.75,65,45,10,30,25,20,15C.75,45,65,30,15,25,20,10D.75,45,65,10,25,30,20,1549.堆排序是()类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是()A.插入B.交换C.F.0(n2)和0(1)G.H.0(nlog2n)和0(n)I.53.在对n个元素的序列进行排序时A.0(logm)B.0(1)C.0(t10(2分】54.对n个记录的文件进行堆排序,A.0(log2n)B.0(n)C.0(2分]55.有一组数据数据9,7,8,20,-1,A.-1,4,8,9,20,7,15,C.-1,4,7,8,20,15,7,5(2分】归并D.基数E.选择0(nlog2n)和0(1)0(n2)和0(n)【西北大学2001二、2],堆排序所需要的附加存储空间是()«1)D.0(nlog2n)【西安电子科技大学2001应用一、最坏情况下的执行时间是多少?()(nlog2n)D.0(n*n)【北方交通大学2001一、9,7,4),用堆排序的筛选方法建立的初始堆为()7B.-1,7,15,7,4,8,20,99D.A,B,C均不对。【南京理工大学1996二、56.归并排序中,归并的趟数是()。【南京理工大学2000一、19(1.5分】A.0(n)B.0(logn)C.O(nlogn)D.0(n*n)类似本题的另外叙述有:(D归并排序的时间复杂性是()»【中山大学1999一、12]A.O(N*N)B.0(N)C.0(N*LOG(N))D.0(LOG(N))57.在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫()A.插入排序B.枚举排序C.选择排序D.交换排序【北京邮电大学2000二、6(20/8分】58.就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是()A.堆排序〈快速排序〈归并排序B.堆排序〈归并排序〈快速排序C.堆排序〉归并排序>快速排序D.堆排序>快速排序>归并排序E.以上答案都不对【西安交通大学1996三、1(3分)】59.排序方法有许多种,(1)法从未排序的序列中依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;①法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端:交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;(3)和(4)是基于这类方法的两种排序方法,而(4)是比 197(3)效率更高的方法:(5)法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。【北方交通大学1999一、3(5分】(1)—(5):A.选择排序B.快速排序C.插入排序D.起泡排序E.归并排序F.shell排序G.堆排序H.基数排序类似本题的另外叙述有:(1)排序的方法有很多种,()法从未排序的序列中依次取出元素与已排序序列中的元素比较,将其放在已排序序列的正确位置上;()法从未排序序列中挑选元素,并将其依次放入已排序序列的一端:交换排序法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换。()和()是基于这类方法的两种排序方法,而()是比()效率更高的方法。供选择的答案:A.快速排序B.选择排序C.归并排序D.冒泡排序E.直接插入排序【山东大学1998三、2(5分)】【山东工业大学2000三、2(7分】56.设要将序列(q,h,c,y,p,a,m,s,r,d,f,x)中的关键码按字母升序重新排序,(1)()是初始步长为4的shell排序一趟扫描的结果;(2)()是对排序初始建堆的结果;(3)()是以第一个元素为分界元素的快速一趟扫描的结果。从下面供选择的答案中选出正确答案填入括号内。【厦门大学2000六、3(16%/3分)】A.f,h,c,d,p,a,m,q,r,s,y,xB.p,a,c,s,q,d,f,x,r,h,m,yC.a,d,c,r,f,q,m,s,y,p,h,xD.h,c,q,p,a,m,s,r,d,f,x,yE.h,q,c,y,a,p,m,s,d,r,f,x类似本题的另外叙述有:(1)在内排序的过程中,通常需要对待排序的关键码进行多编扫描,采用不同重新排序方法,会产生不同的排序中间结果。设要将序列 1989(2分】类似本题的另外叙述有:(1)已知待排序的N个元素可分为N/K个组,每个组包含K个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为()A.O(klog2k)B.O(klog2n)C.O(nlog2k)D.0(nlog2n)【中科院计算所1998二、9(2分)】65.采用败者树进行k路平衡归并的外部排序算法,其总的归并效率与k()A.有关B.无关【北京工业大学2000一、2(3分)】66.采用败者树进行K路平衡归并时,总的(包括访外)归并效率与K()»A.有关B.无关【北京工业大学2001一、4(2分)】二、判断题:1.当待排序的元素很大时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂度的主要因素。()【长沙铁道学院1998一、10(1分)】2.内排序要求数据一定要以顺序方式存储。()【南京理工大学1997二、2(2分】3.排序算法中的比较次数与初始元素序列的排列无关。()【南京航空航天大学1997一、8(1分】4.排序的稳定性是指排序算法中的比较次数保持不变,且算法能够终止。()【南京航空航天大学1996六、9(1分】5.在执行某个排序算法过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。()【上海交通大学1998一、18]6.直接选择排序算法在最好情况下的时间复杂度为0(N)。()【合肥工业大学2001二、10(1分】7.两分法插入排序所需比较次数与待排序记录的初始排列状态相关。()【上海交通大学1998一、15]8.在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlogzn)。()【合肥工业大学2000二、9(1分】9.在待排数据基本有序的情况下,快速排序效果最好。()【南京理工大学1997二、4(2分】10.当待排序记录已经从小到大排序或者已经从大到小排序时,快速排序的执行时间最省。()【上海交通大学1998一、16]11.快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。()【北京邮电大学1998一、7(2分】12.堆肯定是一棵平衡二叉树。()【南京航空航天大学1997一、6(1分】13.堆是满二叉树。()【南京航空航天大学1996六、6(1分】14.(101,88,46,70,34,39,45,58,66,10)是堆。()【北京邮电大学1999二、1(2分】15.在用堆排序算法排序时,如果要进行增序排序,则需要采用“大根堆”。()【合肥工业大学2000二、10(1分】16.堆排序是稳定的排序方法。()【上海交通大学1998一、19]17.归并排序辅助存储为0(1)«()【青岛大学2000四、9(1分】18.在分配排序时,最高位优先分配法比最低位优先分配法简单。()【上海交通大学1998一、20]19.冒泡排序和快速排序都是基于交换两个逆序元素的排序方法,冒泡排序算法的最坏时间复杂性是0(n*n),而快速排序算法的最坏时间复杂性是O(nlogJ),所以快速排序比冒泡排序算法效率更高。()【上海海运学院1997一、9(1分】 19915.交换排序法是对序列中的元素进行一系列比较,当被比较的两个元素逆序时,进行交换,冒泡排序和快速排序是基于这类方法的两种排序方法,冒泡排序算法的最坏时间复杂性是0(n*n),而快速排序算法的最坏时间复杂性是0(nlogm);所以快速排序比冒泡排序效率更高。()【上海海运学院1998一、10(1分)】【上海海运学院1995一、10(1分】16.快速排序和归并排序在最坏情况下的比较次数都是O(nlogm)。()【上海海运学院1996一、9(1分】17.在任何情况下,归并排序都比简单插入排序快。()【北京邮电大学2000一、4(1分】18.归并排序在任何情况下都比所有简单排序速度快。()【北京邮电大学2002一、9(1分】19.快速排序总比简单排序快。()【东南大学2001—、9(1分】20.中序周游(遍历)平衡的二叉排序树,可得到最好排序的关键码序列。()【中山大学1994一、4(2分】21.外部排序是把外存文件调入内存,可利用内部排序的方法进行排序,因此排序所花的时间取决于内部排序的时间。()【北京邮电大学1998一、8(2分】22.在外部排序时,利用选择树方法在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。()【上海海运学院1999一、10(1分】23.为提高在外排序过程中,对长度为N的初始序列进行“置换一选择”排序时,可以得到的最大初始有序段的长度不超过N/2。()24.排序速度,进行外排序时,必须选用最快的内排序算法。()25.在完成外排序过程中,每个记录的I/O次数必定相等。()【大连海事大学2001一、20(每题1分)】26.影响外排序的时间因素主要是内存与外设交换信息的总次数。()【东北大学1997二、5(2分)】三、填空题1.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的和记录的.【北京邮电大学2001二、7(4分】2.外排序的基本操作过程是和.【西安电子科技大学1998二、3(3分】类似本题的另外叙述有:(1)外部排序中两个相对独立的阶段是—和—。【西安电子科技大学1999软件一、8(2分]3.属于不稳定排序的有。【青岛大学2002三、5(2分】4.分别采用堆排序,快速排序,冒泡排序和归并排序,对初态为有序的表,则最省时间的是算法,最费时间的是算法。【福州大学1998二、10(2分)】类似本题的另外叙述有:(1)设表中元素的初始状态是按健值递增的,分别用堆排序,快速排序,冒泡排序和归并排序方法对其进行排序(按递增顺序),_排序最省时间,—排序最费时间。【厦门大学2001一、5(14%/5分)】5.不受待排序初始序列的影响,时间复杂度为O(M)的排序算法是,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是。【中国人民大学2001一、3(2分)】6.直接插入排序用监视哨的作用是.【南京理工大学20018(2分】7.对n个记录的表r[L.n]进行简单选择排序,所需进行的关键字间的比较次数为.【华中理工大学2000一、10(1分】8.用链表表示的数据的简单选择排序,结点的域为数据域data,指针域next;链表首指针为head,链表无头结点。 200selectsort(head)p=head;while(p(l)){q=P;r-(2)while((3)){if((4))q=r:r=®:)tmp=q->data;q->data=p->data;p->data=tmp;p=⑹;)【南京理工大学2000三、2(6分】1.下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点值从小到大链接。请在空框处填上适当内容,每个空框只填一个语句或一个表达式:#include 201}//sort【南京理工大学2001三、2(10分】1.表插入排序的基本思想是在结点中设一指针字段,插入Ri时R1到RiT己经用指针按排序码不减次序链结起夹,这时采用顺序比较的方法找到Ri应插入的位置,做链表插入。如此反复,直到把Rn插入为止。(1)(6分)请完成下列表插入的算法;【山东工业大学2000五(16分】【山东大学1998五】①.RTOl.LINK-(1);R「N1.LINK-(2):②.循环,I以T为步长,从®—到a―执行⑴P-R[0].LINK;Q-0(2)循环,当P>0且(5)时,反复执行Q-P;P-(6)(3)R[Q].LINK-I;R[I].LINKUP(2)(2分)表插入排序的最大比较次数是g_;(3)(2分)表插入排序的最小比较次数是®;(4)(2分)记录移动的次数是组:(5)(2分)需要附加的存储空间是(10);(6)(2分)该排序算法是否是稳定的豆口一。12.设用希尔排序对数组{98,36,-9,0,47,23,1,8,10,7}进行排序,给出的步长(也称增量序列)依次是4,2,1则排序需趟,写出第一趟结束后,数组中数据的排列次序.【南京理工大学1997三、5(2分】13.从平均时间性能而言,排序最佳。【青岛大学2001六、5(3分】14.对于7个元素的集合{1,2,3,4,5,6,7}进行快速排序,具有最小比较和交换次数的初始排列次序为。【长沙铁道学院1997二、1(2分)】15.快速排序在的情况下最易发挥其长处。【长沙铁道学院1998二、5(2分)】类似本题的另外叙述有:(1)快速排序法在情况下最不利于发挥其长处,在情况下最易发挥其长处。【山东大学2001三、5(2分)】16.在数据表有序时,快速排序算法的时间复杂度是。【合肥工业大学2001三、10(2分】17.堆排序的算法时间复杂度为:.【合肥工业大学1999三、10(2分】18.PROCsift(VARr:listtype;k,m:integer);{假设r[k+l..m]中各元素满足堆的性质,本算法调整r[k]使整个序列r[k..m]中各元素满足堆的性质。}i:=k;j:=(1);x:=r[k].key;finished:=false;t:=r[k];WHILE(j<=m)ANDNOTfinishedDO[IF(j 2021,r,i,j:0..n;x:node;在下面的算法描述中填入正确的内容,使其实现1964年Floyd提出的建堆筛选法,要求堆建成后便找到了最小的关键码。筛选算法sift(1,r,heap):步1.[准备]i=1;j-⑴;x-heap[i]步2.[过筛]循环:当②_时反复执行(1).若j〈r且heap[j].key>heap[j+l].key则⑶(2).若⑷贝ljheap[i]-heap[j];⑸;⑹否则跳出循环步3.[结束]heaP[i]一⑺【山东工业大学1996三、2(7分】20.以下程序的功能是利用堆进行排序。请在空白处填上适当语句,使程序完整。PROCEDUREsift(VARr:arr;k,m:integer);VARi,j,x:integer;t:rec;finished:boolean;BEGINi:=k;(1):x:=r[i].key;(2):t:=r[k];WHILE(j<=m)ANDNOTfinishedDOBEGINIF(j 203PROCsift(VARh:heaptype;k,r:integer);VARi,j,x:integer;finish:boolean;BEGINi:=k;x:=h[i];j:=2*j;(01_);WHILE(j<=r)ANDNOTfinishDO[IF(j 204BEGINt:=a[i];a[i]:=a[j];a[j]:=t;k:=k+l;((1))END;REPEAT(⑵);IF((3))THEN((4))ELSEBEGINm:=p[k];k:=k-l:END;UNTIL(i 205扫描的结果是。【北京工业大学1999一、7(8分)】20.外部排序的基本方法是归并排序,但在之前必须先生成—»【北京邮电大学2001二、6(2分】21.磁盘排序过程主要是先生成,然后对合并,而提高排序速度很重要的是,我们将采用方法来提高排序速度。【山东工业大学1995一、4(4分】22.设输入的关键字满足kl>k2>…>kn,缓冲区大小为m,用置换-选择排序方法可产生—个初始归并段。【武汉大学2000一、9]23.下面是一改进了的快速排序算法,请填空并简要说明支持improveqsort递归所需要的最大栈空间用量。PROCEDUREimproveqsort(VARlist:afile;m,n:integer); 206{设list[m].key<=list[n+l].key}VARi,j,k:integer;BEGINWHILEm 207少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏的情况下至少进行多少次比较?【东南大学20005(8分】1.利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给出详细证明。【上海交通大学2000六(8分】2.以下概念的区别:拓扑排序与冒泡排序。【大连海事大学1996三、2(3)(2分)】3.简述直接插入排序,简单选择排序,2-路归并排序的基本思想以及在时间复杂度和排序稳定性上的差别。【西北工业大学1999二(8分)】4.快速排序,堆排序和希尔排序是时间性能较好的排序方法,也是稳定的排序方法。判断正误并改错。【燕山大学1998二、5(2分】5.设LS是一个线性表,LS=(al,a2,…,an),若采用顺序存储结构,则在等概率的前提下,插入一个元素需要平均移动的元素个数是多少?若元素插在a:与a,“之间(0〈=i〈=nT)的概率为(n-i)/(n*(n+l)/2),则插入一个元素需要平均移动的元素个数又是多少?【西安电子科技大学2001软件二、3(5分】6.对于堆积排序法,快速排序法和归并排序法,若仅从节省存储空间考虑,则应该首先选取其中哪种方法?其次选取哪种方法?若仅考虑排序结果的稳定性,则应该选取其中哪种方法?若仅从平均情况下排序最快这一点考虑,则应该选取其中哪些方法?【北京航空航天大学1998一、10(4分】7.在堆排序、快速排序和合并排序中:【吉林大学2001一、5(6分)】(1).若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?(2).若只从排序结果的稳定性考虑,则应选取哪种排序方法?(3).若只从平均情况下排序最快考虑,则应选取哪种排序方法?(4).若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?13.快排序、堆排序、合并排序、Shell排序中哪种排序平均比较次数最少,哪种排序占用空间最多,哪几种排序算法是不稳定的?【首都经贸大学1997一、3(4分)】14.欲求前k个最大元素,用什么分类方法好?为什么?什么是稳定分类?分别指出下列算法是否是稳定分类算法,或易于改成稳定分类算法?A.插入分类B.快速分类C.合并分类D.堆分类E.基数分类【东南大学1994一、3(8分】15.考虑由三个不同关键词构成的序列:{a,b,c},试画出直接插入排序算法的二叉判定树。【吉林大学2001—、3(4分)】16.请阅读下列算法,回答问题PROCEDUREsort(r,n)BEGINFORi:=2TOnDOBEGINx:=r(i);r(0):=x;j:=i-l;WHILEx.key 208ENDEND;问题一:这是什么类型的排序算法,该排序算法稳定吗?问题二:设置r(0)的作用是什么?若将WHILE—DO语句中判断条件改为x.key<=r(j).KEY,该算法将会有什么变化,是否还能正确工作?【上海海运学院1998六(10分)】17.下面是冒泡排序算法,请阅读并完成该程序,并回答以下问题:PROCEDUREbubblesort(r,n)BEGINi:=1;m:=n-l;flag:=l;WHILE(i<=(1))AND(flag=(2))DOBEGINflag:=(3);FORj:=lTOmDOIFr[j].key>r[j+l].keyTHENBEGINflag:=(4);t:=r[j];r[j]:=r[j+l];r[j+l]:=tEND;i:=i+lEND;END.(1)请在上面横线上填上适当的语句,完成该算法程序。(2)设计标志flag的作用是什么?(3)该算法结点的最大比较次数和最大移动次数是多少?(4)该分类算法稳定吗?【上海海运学院1996六(12分)1999六(16分】18.仔细阅读下面的过程,并回答有关的问题PROCEDUREunknownname(VARA:array[l..500]OFinteger;n:integer);VARi,j,x:integer;b:boolean;BEGINb:=true;i:=1;WHILE(i 209次交换?18.写出下列排序算法的基本思想,并写出对序列(23,12,35,47,16,25,36,19,21,16)进行排序时每一趟的结果。PROCbbsort(VARr:sequence;n:integer);{r是一个数组}d:=l;pos[-l]:=1;pos[l]:=n;i:=l;exchanged:=true;WHILEexchangedDO[exchangedfalse;WHILEi<>pos[d]DO[IF(r[i]-r[i+d])*d>0THEN[r[i]与r[i+d]交换;exchanged:True;];i:=i+d;1pos[d]:=pos[d]-d;i:=pos[d];d:=-d;]ENDP;【山东科技大学2002五(12分】19.设要求从大到小排序。问在什么情况下冒泡排序算法关键字交换的次数为最大。【南京航空航天大学1996九、1(4分】20.设与记录R1,R2,…,Rn对应的关键词分别是KI,K2,Kn«如果存在Ri和Rj使得j 210用直接插入排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。(2)用直接选择排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。(3)直接插入排序算法和直接选择排序算法的稳定性如何?【山东工业大学1997四(15分)24.在执行某个排序算法过程中,出现了排序关键字朝着最终排序序列相反的方向的移动,从而认为该算法是不稳定的。这种说法对么?为什么?【东北大学2001一、1(4分)】类似本题的另外叙述有:(1)(冒泡)排序过程中,有的关键字在某趟排序中可能朝着与最终排序相反的方向移动,试举例说明之。快速排序过程中有没有这种现象?【东北大学2000一、5(4分)】25.对下面数据表,写出采用SHELL排序算法排序的每一趟的结果,并标出数据移动情况。(125,11,22,34,15,44,76,66,100,8,14,20,2,5,1)«【合肥工业大学1999四、4(5分】26.快速排序的最大递归深度是多少?最小递归深度是多少?【清华大学19991(2分】27.已知某文件的记录关键字集为{50,10,50,40,45,85,80),选择一种从平均性能而言是最佳的排序方法进行排序,且说明其稳定性。【西安电子科技大学1996五(10分】28.在内排序算法中,待排序的数据已基本有序时,花费时间反而最多的排序方法是哪种?【西安电子科技大学2000计应用一、1(5分】29.我们知道,对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。问:【西安电子科技大学2001计应用五(12分)】【中国矿业大学2000六(10分】(1)当n=7时,在最好情况下需进行多少次比较?请说明理由。(2)当n=7时,给出一个最好情况的初始排序的实例。(3)当n=7时,在最坏情况下需进行多少次比较?请说明理由。(4)当n=7时,给出一个最坏情况的初始排序的实例。类似本题的另外叙述有:(1)快速排序(quicksorting)的效率与原始序列有关,现用快速排序算法对关键字分别为1—15的15个元素进行排序①在最好情况下要进行几遍比较,给出一种原始序列实例;②在最坏情况下要进行几遍比较,给出一种原始序列实例。【浙江大学1995七(12分)】(2)对N个元素组成的线性表进行快速排序时,所需进行的比较次数依赖于这N个元素的初始排列。对N=7,给出快速排序的一个最好情况的初始排列实例(7个元素可取自集合{1,2,3,4,5,6,7})o【西北大学2000二、5(5分)】30.有一随机数组(25,84,21,46,13,27,68,35,20),现采用某种方法对它们进行排序,其每趟排序结果如下,则该排序方法是什么?【武汉交通科技大学1996二、5(6分)】初始:25,84,21,46,13,27,68,35,20第一趟:20,13,21,25,46,27,68,35,84第二趟:13,20,21,25,35,27,46,68,84第三趟:13,20,21,25,27,35,46,68,8431.快速排序是在所有情况下,排序速度最快吗?为什么?在何种情况下使用此排序法最好?【北京邮电大学1993—,1(5分】32.对给定文件(28,07,39,10,65,14,61,17,50,21)选择第一个元素28进行划分,写出其快速排序第一遍的排序过程。【厦门大学1998七、1(8分)】 211类似本题的另外叙述有:(1)对下列关键字序列进行快速排序(从小至大)(48,38,65,95,73,13,27,50)要求给出快速排序的算法思想,并画出排序过程示意图。【南京航空航天大学1999五(10分】(2)设记录的关键字集合K={23,9,39,5,68,12,62,48,33},给定的增量序列口={4,2,1),请写出对K按“SHELL方法”排序时各趟排序结束时的结果;若每次以表的第一元素为基准(或枢轴),写出对K按“快速排序方法”排序时,各趟排序结束时的结果。【北京科技大学1999七(10分)2000七(10分】24.下面是一改进了的快速分类算法1.PROCEDUREqsort1(VARlist:afile;m,n:integer);2(设list[m].key 212BEGINIFs=tTHENrl[s]:=r[s]ELSEBEGINMERGESORT(r,r2,s,(s+t)DIV2);MERGESORT(r,r2,(S+t)DIV2+1,t):MERGE(r2,s,(s+t)DIV2,t.rl)ENDEND;若对下列关键字序列进行快速排序和归并排序,分别写出三次调用过程qkpass和过程merge后的结果。(98,36,77,42,23,65,84,10,59,37,61,18).【清华大学1996六】36.已知一关键码序列为:3,87,12,61,70,97,26,45„试根据堆排序原理,填写完整下示各步骤结果。【首都经贸大学1998二、7(10分】建立堆结构:交换与调整:(1)877026614512397;(2);(3)614526312708797;(4);(5)261234561708797;(6);(7)312264561708797;39.判断下列序列是否是堆(可以是小堆,也可以是大堆,若不是堆,请将它们调整为堆)。(1)100,85,98,77,80,60,82,40,20,10,66(2)100,98,85,82,80,77,66,60,40,20,10(3)100,85,40,77,80,60,66,98,82,10,20(4)10,20,40,60,66,77,80,82,85,98,100【山东大学1998四(5分)】【山东工业大学2000四(5分】类似本题的另外叙述有:(1)判别以下序列是否是堆(大顶堆),如果不是,则把它调整为堆。(12,70,33,65,24,56,48,92,86,33)【燕山大学2001四、1(8分)】(2)判断下面的每个结点序列是否表示一个堆,如果不是堆,请把它调整成堆。70,65,50①100,90,80,60,85,75,20,25,10,②100,70,50,20,90,75,60,25,10,85,65,80【复旦大学1997二(8分】(3)判别下列两个序列是否为堆,若不是,按照对序列建堆的思想把它调整为堆,用图表示建堆的过程。【厦门大学2001二、1(24%/3分)】①(1,5,7,20,18,8,8,40)②(18,9,5,8,4,17,21,6)(4)根据给定的关键字集合(20,15,40,35,45,25,50,30,10)顺序输入①构造一棵完全二叉树;②画出整理好的一棵堆树;③画出一棵输出一个排序记录后的二叉树;④画出重新调整好的堆树。【大连海事大学2001六(5分)】 21339.全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为什么?【北京邮电大学1996一、3(4分】类似本题的另外叙述有:(1)如果在1000000个记录中找出2个最小的记录,你认为采用什么样的排序方法所需的关键字比较次数最少?共计多少次?【厦门大学1999三、4]40.已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列各题。(1)根据以上序列建立一个堆(画出第一步和最后堆的结果图),希望先输出最小值。(2)输出最小值后,如何得到次小值。(并画出相应结果图)【同济大学2001二(10分)】类似本题的另外叙述有:(1)对于输入关键字序列48,70,65,33,24,56,12,92进行:①建立堆排序的初始堆(小顶堆),要求画出主要过程。②建一棵平衡二叉树,画出过程(至少每次调整有一张,标出最小不平衡子树的根)。【北京工业大学2001二、5(6分)】(2)简要叙述堆排序的算法思想。并对如下关键字序列(3,8,85,12,37,50)按堆排序算法进行从小到大排序,要求画出排序全过程的示意图。【南京航空航天大学1997五(10分】(3)设记录关键字集合字{28,17,85,96,75,8,42,65,04)①写出对K进行“二路归并”且按关键字递增次序排序时,各趟排序的结果;②如何将K建成一个完全二叉树形式的最小堆;【北京科技大学1997七(10分】41.设有n个无序元素,按非递减次序排序,但只想得到前面长度为k的部分序列,其中n»k,最好采用什么排序方法?为什么?如果有这样一个序列{59,11,26,34,17,91,25},得到的部分序列是:{11,17,25},对于该例使用所选择的方法实现时,共执行多少次比较?【东北大学2002一、4(3分)】类似本题的另外叙述有:(1)如果只想得到一个序列中第K个最小元素之前的部分排序序列,那么最好应采用哪种排序算法?为什么?如由这样一个序列:57,40,38,11,13,34,48,75,25,6,19,9,7得到其第四个最小元素之前的部分排序序列:6,7,9,11,-用你选用算法实现时,共执行多少次比较?【北方交通大学1994七(16分】42.写出用堆排序算法对文件F=(12,3,15,30,9,28)进行排序时,初始堆及以后每挑好一个元素重新调整后堆的状态,并指出这里的堆和败者树的一个主要区别。【东南大学1998二(8分】43.请回答下列关于堆(Heap)的一些问题:【清华大学2000五(12分】(1)(4分)堆的存储表示是顺序的,还是链接的?(2)(4分)设有一个最小堆,即堆中任意结点的关键码均大于它的左子女和右子女的关键码。其具有最大值的元素可能在什么地方?(3)(4分)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大。表示法)?44.解答问题(1)(6分)设某文件中待排序记录的排序码为72,73,71,23,94,16,05,68,试画图表示出树形选择排序(增序)过程的前三步。(2)(4分)试说明树形选择排序的基本思想。 214(1)(2分)树形选择排序与直接选择排序相比较,优缺点是什么?(2)(3分)堆排序是如何改进树形排序方法的?优点是什么?【山东大学1999五(15分】【山东工业大学1999五(15分】39.若有N个元素已构成一个小根堆,那么如果增加一个元素为Ke,请用文字简要说明你如何在log2n的时间内将其重新调整为一个堆?【中科院计算所1999三、2(5分)】40.填空并回答相关问题(1)下面是将任意序列调整为最大堆(MAXHEAP)的算法,请将空白部分填上:将任意序列调整为最大堆通过不断调用adjust函数,即:FOR(i=n/2;i>0;i--)adjust(list,i,n);其中list为待调整序列所在数组(从下标1瑞),n为序列元素个数,adjust函数为:voidadjust(intlist[]»introot,intn)/*将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n*/{intchild,rootkey;rootkey=list[root];child=2*root;while(child<=n){if((child 215(2)快速排序每划分一次书写一个次序。(3)堆排序先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。类似本题的另外叙述有:(1)对关键字/权值序列{9,4,3,8,10,7,6,5}①设序列是初始归并段的长度,画出最佳归并树,并计算其对应归并排序的I/O次数(假设每次I/O读写一个记录)。②设序列是关键字输入次序,画出得到的二叉排序树。③画出构造初始小根堆的过程。④画出快速排序第一趟的过程。⑤画出步长为2的一趟希尔排序结果。【华南师范大学2000二(20分)】48.(1)判定起泡排序的结束条件是什么?(2)请简单叙述希尔排序的基本思想。(3)将下列序列调整成堆(堆顶为最小值)12345678910112703365245648928013(4)在16个关键字中选出最小的关键字至少要多少次比较?再选出次小的关键字至少要多少次比较?请简要说明选择的方法和过程。【燕山大学1999九(14分】49.给出如下关键字序列321,156,57,46,28,7,331,33,34,63试按链式基数排序方法,列出一趟分配和收集的过程。【北京轻工业学院1999九(10分】类似本题的另外叙述有:(1)已知整数数组a的10个元素为326,129,167,588,212,95,980,725,443,601,用以下排序方法进行由小到大排序。【西南交通大学2000二、6] 216①用基数排序算法时,试写出第一次分配和收集后数组a中的结果。②用堆排序时,试写出将第一个选出的数据放在数组a的最后位置上,将a调整为堆之后的a中的结果。48.请写出应填入下列叙述中()内的正确答案。【上海大学2002一(8分】注:a是整数数组,存放要排序的数组集合,n是a的长度,p,i,j,k,m,t是临时变量,p为整型数组,i,为整型变量。本题给出的是将数组a的元素al,a2,…,an从大到小排序的子程序的框图,如上图,填空完善此算法框图。该子程序采用改进的选择排序方法,该方法基于以下思想:在选择第一大元过程中:al与aj(j=n,nT,…,2)逐个比较,若发现ajDal,则ajl与al交换,交换后新的ajl有性质ajl>=at(jl 217【哈尔滨工业大学1999六(14分】57.给定一个关键字序列{24,19,32,43,38,6,13,22},请写出快速排序第一趟的结果;堆排序时所建的初始堆;归并排序的全过程。然后回答上述三中排序方法中那一种方法使用的辅助空间最少?在最坏情况下那种方法的时间复杂度最差?【西安电子科技大学1999五(10分】58.奇偶交换排序如下所述:对于初始序列A[l],A[2],…,A[n],第一趟对所有奇数i(l〈=i 218南师范大学1999四(10分)】57.对输入文件(101,51,19,61,3,71,31,17,19,100,55,20,9,30,50,6,90);当k=6时,使用置换-选择算法,写出建立的初始败者树及生成的初始归并段。【北方交通大学1999四(12分】类似本题的另外叙述有:(1)给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),设内存工作区可容纳4个记录,写出用置换-选择排序得到的全部初始归并段。【上海交通大学1999十】(2)用置换-选择排序法产生文件F(长度为n)的初始归并段(设内存缓冲区的长度为m),①平均情况下,初始归并段的长度为多少?为什么?②初始归并段的长度最长与最短时,其长度分别为多少?在何种情况下出现?简单解释一下。【上海交通大学2000九(8分】58.设有N个记录的一个文件,经内部排序后得到650个初始归并段。(1)试问在四台磁带机上分别用平衡归并和多步归并进行外部排序各需要多少趟归并?(2)给出多步归并排序前五趟归并的情况。(10分)【北方交通大学1997六(16分】类似本题的另外叙述有:(1)已知有8个初始归并段,其长度分别为10,20,25,30,45,12,16,2,现用T0,Tl,T2三条磁带进行二路多步归并排序,写出每遍归并后各归并段的分布,并给出初始归并段在磁带上的最佳初始分布。【西北工业大学1998二、1(10分)】 21957.写出或画出下面两题的结果:【北京邮电大学1997四(10分】(1)归并段长度分别为9,4,7,3,8,6,15,试画出3路平衡最佳归并树。(2)有二叉树中序序列为;ABCEFGHD;后序序列为:ABFHGEDC.请画出此二叉树。类似本题的另外叙述有:(1)设有11个长度(即包含记录的个数)不同的初始归并段,它们所包含的记录个数分别为25,40,16,38,77,64,53,88,9,48,98.试根据它们做4路平衡归并,要求:(1)指出总的归并趟数;(3分)(2)构造最佳归并树;(8分)(3)根据最佳归并树计算每一趟及总的读记录数。(5分)【清华大学1997八(16分】58.外排序中为何采用k-路(k>2)合并而不用2-路合并?这种技术用于内排序有意义吗?为什么?【东南大学1995三(8分】59.给定输入文件:101,48,19,65,3,74,33,17,21,20,99,53,21,并设记录缓冲区个数k=4,写出基于败者树的外排序顺串生成算法runs输出的顺串。【东南大学1996,、6(6分】五、算法设计题:1.冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。【吉林大学2001二、3(9分】类似本题的另外叙述有:(1)编写一个双向气泡排序的算法,即相邻两遍向相反方向起泡。【北京邮电大学1992六(10分)】2.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)【北京邮电大学1997七(15分】|八|山I;~~卬1二3.请编写直接插入排序算法。TYPErcdtype=RECORDkey:integer;otheritem:anytype;END;listtype=ARRAY[0..n]OFrcdtype;【北京轻工业学院1998七(10分】4.(此题单考生做)用类PASCAL语言(或PASCAL语言)完成下列各题:设单链表头结点指针为L,结点数据值为整型,试写出对链表L按“插入方法”排序的算法:LINSORT(Do【北京科技大学1999十、1(10分)2000十、1(10分】5.输入50个学生的记录(每个学生的记录包括学号和成绩),组成记录数组,然后按成绩由高到低的次序输出(每行10个记录)。排序方法采用选择排序。【北京师范大学1999五】6.有一种简单的排序算法,叫做计数排序(countsorting)o这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值为C,那么,这个记录在新的有序表中的合适的存放位置即为C。(1)(3分)给出适用于计数排序的数据表定义;(2)(7分)使用Pascal或C语言编写实现计数排序的算法;(3)(4分)对于有n个记录的表,关键码比较次数是多少?(4)(3分)与简单选择排序相比较,这种方法是否更好?为什么?【清华大学2000三(17分】类似本题的另外叙述有:结点类型和存储方式如下:(l)TYPEnode=REC0RD 220key:integer;info:datatype;count:integerEND;VARr:ARRAY[1..n]OFnode;请给出一个排序方法,不移动结点存储位置,只在结点的count字段记录结点在排序中的序号(设排序码最大的结点序号为1)。【国防科技大学1999七】7.快速分类算法中,如何选取一个界值(又称为轴元素),影响着快速分类的效率,而且界值也并不一定是被分类序列中的一个元素。例如,我们可以用被分类序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速分类方法。【石油大学1998五(18分)】8.写出-一趟快速排序算法。【山东师范大学2000二、4(10分)2001二、5(10分)】类似本题的另外叙述有:(1)某个待排序的序列是•个可变长度的字符串序列,这些字符串一个接一个地存储于唯一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。【西安电子科技大学2000计应用七(11分】(2)若待排序列用单链表存储,试给出其快速排序算法。【北京邮电大学2000七(15分】9.设有一个数组中存放了一个无序的关键序列KI、K2、…、Kn«现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过no(注:用程序实现)【南京航空航天大学1997六(12分】10.借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“notfind"信息。请编写出算法并简要说明算法思想。【北京邮电大学1998七(15分】11.已知关键字序列(KI,K2,K3,…,Kn-1)是大根堆。(1)试写出一算法将(KI,K2,K3,…,Kn-1,Kn)调整为大根堆;(2)利用(1)的算法写一个建大根堆的算法。【中科院软件所1999七、2(7分】类似本题的另外叙述有:(1)设文件(RI,R2,…,Rn)是一个堆,Rn+1是任意一个节点,试设计一个算法,该算法把Rn+1添加到堆中,并使添加后形成的文件仍是一个堆,要求算法的时间复杂性为0(log2n)o【吉林大学1999二、2(8分)】12.辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指出结点排序后的逻辑顺序地址。设用K[l],K[2],…,K[N]表示N个结点的值,用T[l],T[2],…,用N]表示辅助地址表.初始时T[i]:=i,在排序中,凡需对结点交换就用它的地址来进行。例如当N=3时,对K(31,11,19)则有T(2,3,1).试编写实现辅助地址表排序(按非递减序)算法的语句序列。【重庆大学2000四、2】13.关于堆排序方法,完成如下工作:(1)简述该方法的基本思想。(2)写出堆排序算法。(3)分析该算法的时间复杂度。【西南财经大学1999五】类似本题的另外叙述有:(DN个元素的序列满足什么条件才能称之为堆?用类PASCAL语言写出堆排序和算法。【南开大学1997七(15分)】14.设待排序的文件用单链表作存储结构,其形式如下:TYPEpointer=tnode;node=REC0RDkey:integer;next:pointer;END;写出以head为头指针的选择排序算法。【中山大学1999二(10分】 2217.非递归的快速排序算法。【中科院软件所1997三(10分)】8.一最小最大堆(minmaxheap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆;minlevelmaxlevelminlevelmaxlevel(1)画出在上图中插入关键字为5的结点后的最小最大堆。(2)画出在上图中插入关键字为80的结点后的最小最大堆;(3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。(4)用C或PASCA;实现上述算法。【浙江大学1996八(26分)】9.二路插入排序是将待排关键字序列中关键字分二路分别按序插入到辅助向量d[l..n]前半部和后半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[l],再从r[2]记录开始分二路插入。编写实现二路插入排序算法。【北京工业大学1998八(10分)】10.叙述基数排序算法,并对下列整数序列图示其基数排序的全过程。(179,208,93,306,55,859,984,9,271,33)【南京航空航天大学2000—]11.输入N个只含一位数字的整数,试用基数排序的方法,对这N个数排序。 222【中国人民大学2001三、1(10分)】7.设记录R[i]的关键字为R[i].KEY(K=i<=k),树结点T[i](K=i<=K-l)指向败者记录,T[0]为全胜记录下标。写一算法产生对应上述R[i](K=i<=k)的败者树,要求除R[l..k]和T[0..kT]以外,只用0(1)辅助空间。【东南大学1995九(15分】8.设有顺序放置的n个桶,每个桶中装有•粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。【上海大学1999二2(18分】9.数据结构DEAP的定义如下:DEAP是一棵完全二叉树,它或者是一棵空树,或者满足下列特性:(1)树根不包含元素.(2)其左子树是一小堆(MINHEAP),其右子树是一大堆(MAXHEAP).(3)若右子树非空,设i是左子树的任一结点,j是右子树中与i相应的结点.若这样的j结点不存在,则取j为右子树中与i的父结点相应的结点;结点i的关键字总是小于或等于结点j的关键字值。一个DEAP的例子如右图所示,z-x与结点15相对应的结点为20,与结点19对应的结点为25.人(1)给出在该DEAP中插入结点4后的结果.(2)写出在DEAP中插入新结点的算法.@@(3)用C或PASCAL语言编写实现上述算法的程序.(20分)名黑小【浙江大学19977(2。分】 223第H■■一章文件一、选择题i.散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择好的()方法是散列文件的关键。【哈尔滨工业大学2001二、5(2分]A.散列函数B.除余法中的质数C.冲突处理D.散列函数和冲突处理2.顺序文件采用顺序结构实现文件的存储,对大型的顺序文件的少量修改,要求重新复制整个文件,代价很高,采用()的方法可降低所需的代价。【北京邮电大学2000二、8(20/8分】A.附加文件B.按关键字大小排序C.按记录输入先后排序D.连续排序3.用ISAM组织文件适合于()。【中科院软件所1998)A.磁带B.磁盘4.下述文件中适合于磁带存储的是()。【中科院计算所2000一、7(2分)】A.顺序文件B.索引文件C.散列文件D.多关键字文件5.用ISAM和VSAM组织文件属于().A.顺序文件B.索引文件C.散列文件【中国科技大学1998二、5(2分)中科院计算所1998二、5(2分】6.ISAM文件和VASM文件属于()«【山东大学2001二、5(1分)】A.索引非顺序文件B.索引顺序文件C.顺序文件D.散列文件7.B+树应用在()文件系统中。【北京邮电大学2001一、1(2分】A.ISAMB.VSAM二、判断题1.文件是记录的集合,每个记录由一个或多个数据项组成,因而一个文件可看作由多个记录组成的数据结构。【长沙铁道学院1998一、5(1分)】2.倒排文件是对次关键字建立索引。【南京航空航天大学1997一、10(1分】3.倒排序文件的优点是维护简单。【南京航空航天大学1995五、10(1分】4.倒排文件与多重表文件的次关键字索引结构是不同的。【西安交通大学1996二、6(3分)】5.Hash表与Hash文件的唯一区别是Hash文件引入了,桶’的概念。【南京航空航天大学1996六10(1分)6.文件系统采用索引结构是为了节省存储空间。【北京邮电大学2000一、10(1分】7.对处理大量数据的外存介质而言,索引顺序存取方法是一种方便的文件组织方法。【东南大学2001一、1-10(1分】8.对磁带机而言,ISAM是一种方便的稳健组织方法。【中科院软件所1997一、10(1分】9.直接访问文件也能顺序访问,只是一般效率不高。【北京邮电大学2002一、10(1分】10.存放在磁盘,磁带上的文件,即可以是顺序文件,也可以是索引结构或其他结构类型的文件。【山东大学2001一、7(1分)】11.检索出文件中的关键码值落在某个连续的范围内的全部记录,这种操作称为范围检索。对经常需要做范围检索的文件进行组织,采用散列法优于顺序检索法。【中山大学1994一、5(2分】三、填空题 2241.文件可按其记录的类型不同而分成两类,即和文件。【西安电子科技大学1998二、6(3分】2.数据库文件按记录中关键字的多少可分成和两种文件。【燕山大学1998—、10(2分】3.从用户的观点看,文件的逻辑结构通常可以区分为两类:一类是如dBASE中数据库文件那样的文件组织结构,称为(1)文件:另一种是诸如用各种文字处理软件编辑成的文本文件,称为(2)文件。从文件在存储器上的存放方式来看,文件的物理结构往往可区分为三类,即⑶,⑷和(5)。B+树适用于组织(6)的索引结构,m阶B+树每个结点至多有(7)个儿子,除根结点外每个结点至少有(8)个儿子,根结点至少有(9)个儿子,有k个儿子的结点必有个关键码。【山东工业大学1996一、4(5分】4.文件由组成;记录由组成。【大连海事大学1996(2分)】5.物理记录之间的次序由指针相链表示的顺序文件称为。【燕山大学1998一、11(1分】6.顺序文件中,要存取第I个记录,必须先存取个记录。【哈尔滨工业大学2001一、7(2分】7.索引顺序文件既可以顺序存取,也可以存取。【武汉大学2000—、10]8.建立索引文件的目的是。【中山大学1998一、12(1分】9.索引顺序文件是最常用的文件组织之一,通常用—结构来组织索引。【长沙铁道学院1998二、6(2分)】10.倒排序文件的主要优点在于。【山东工业大学1995—、3(1分】11.检索是为了在文件中寻找满足一定条件的记录而设置的操作。检索可以按__检索,也可以按——检索;按——检索又可以有——检索和——检索。【山东大学1999一、1(5分)】12.散列检索技术的关键是和。【山东工业大学1995一、2(2分】13.VSAM系统是由、、构成的。【北京科技大学1997一、9]14.VSAM(虚拟存储存取方法)文件的优点是:动态地不需要文件进行并能较快地进行查找。【山东大学2001三、4(2分)】四、应用题1.文件【山东工业大学1998一、1-1(2分】2.文件存储结构的基本形式有哪些?一个文件采用何种存储结构应考虑哪些因素?【燕山大学1999二、4(4分】3.名词解释:索引文件【哈尔滨工业大学2000一、4(3分】4.什么是索引顺序文件?【哈尔滨工业大学2001三、5(3分)】【山东工业大学1998—、1-2(2分]5.索引顺序存取方法(ISAM)中,主文件已按关键字排序,为何还需要主关键字索引?【东南大学1995四(6分】6.分析ISAM文件(INDEXEDSEQUENTIALACCESSMETHORD)和VSAM文件(VIRTUALSTORAGEACCESSMETHORD)的应用场合、优缺点等。【华南理工大学2001-、4(4分】7.一个ISAM文件除了主索引外,还包括哪两级索引?【北京科技大学1999一、8(2分】8.倒排文件【山东工业大学1998一、1-3(2分】9.为什么在倒排文件(invertedfiles)组织中,实际记录中的关键字域(keyfields)可删除以节约空间?而在多表(multilists)结构中这样做为什么要牺牲性能?【东南大学1997一、4(8分】10.简单比较文件的多重表和倒排表组织方式各自特点。【东南大学2000、2(6分】11.组织待检索文件的倒排表的优点是什么?【北京科技大学2001一、10(2分】12.为什么文件的倒排表比多重表组织方式节省空间?【东南大学2001一、2(1分】13.试比较顺序文件,索引非顺序文件,索引顺序文件,散列文件的存储代价,检索,插入,删除记录时的优点和缺点。【西北工业大学1999四(8分)】 2251.已知两个各包含N和M个记录的排好序的文件能在0(N+M)时间内合并为一个包含N+M个记录的排好序的文件。当有多于两个排好序的文件要被合并在一起时,只需重复成对地合并便可完成。合并的步骤不同,所需花费的记录移动次数也不同。现有文件Fl,F2,F3,F4,F5,各有记录数为20,30,10,5和30,试找出记录移动次数最少的合并步骤。【重庆大学2000二、3]2.已知职工文件中包括职工号、职工姓名、职务和职称4个数据项(见下表)。职务有校长、系主任、室主任和教员;校长领导所有系主任,系主任领导他所在系的所有室主任,室主任领导他所在室的全体教员;职称有教授、副教授和讲师3种。请在职工文件的数据结构中设置若干指针和索引,以满足下列两种查找的需要:(1)能够检索出全体职工间领导与被领导的情况;(2)能够分别检索出全体教授、全体副教授、全体讲师。要求指针数量尽可能少,给出各指针项索引的名称及含义即可。表职工文件职工号职工姓名职务职称001张军教员讲师002沈灵系主任教授003叶明校长教授004张莲室主任副教授005叶宏系主任教授006周芳教员教授007刘光系主任教授008黄兵教员讲师009李民室主任教授010赵松教员副教授…………【北京航空航天大学1996】参考文献[1]严蔚敏等。数据结构。北京:清华大学出版社,1997.4[2]殷人昆■数据结构。北京:清华大学出版社,2001.3[3]范策等。算法与数据结构。北京:机械工业出版社,2004.?[4]胡学刚。数据结构算法设计指导。北京:清华大学出版社,1999.2[5]黄水松等。数据结构与算法习题解析。北京:电子工业出版社,1996.8[6]蒋盛益等。《数据结构》学习指导与训练。北京;中国水利水电出版社,2003.8[7]前沿考试研究室。计算机专业研究生入学考试全真题解一一数据结构与程序设计分册.北京:人民邮电出版社,2003.6[8]何军等。数据结构500题。北京:人民邮电出版社,2003.4[9]何军等。数据结构课程辅导与习题解析。北京:人民邮电出版社,2003.3[10]徐孝凯。数据结构辅导与提高。北京:清华大学出版社,2003.12 226[U]薛晓燕等。数据结构习题集与解题指导。北京:科学技术文献出版社,1995.7q.link,dataTHENBEGINs:=(C);(D):=s".link;s\link:=(E);(F):=s;(G);ENDELSEBEGIN(H);s:=q\link;(I);dispose(s)ENDEND;dispose(q)END;【复旦大学1997五(18分】22.PROCins_linklist(la:linkisttp;i:integer;b:elemtp);{la为指向带头结点的单链表的头指针,本算法在表中第i个元素之前插入元素b}D:=⑴;i:=(2);{指针初始化,j为计数器}WHILE(pONIL)AND(13})DO[p:=X4);j:=j+l;]{寻找第i-1个结点}IF(p=NIL)OR(⑸)THENerror('Nothisposition*)ELSE[new(s);st.data:=b;st.next:=pf.next;pt.next:=s;]ENDP;{ins-linklist}【燕山大学1998四、1(15分】
中的关键码按字母序的升序排列,则(1)是冒泡排序一趟扫描的结果,(2)是初始步长为4的希尔(SHELL)排序一趟扫描的结果,(3)是合并排序一趟扫描的结果,(4)是以第一个元素为分界元素的快速排序一趟扫描的结果,(5)是堆排序初始建堆的结果。供选择的答案:【上海海运学院1997二、3(5分】1-5:A.f,h,c,d,p,a,m,q,r,s,y,xB.p,a,c,s,q,d,f,x,r,h,m,yC.a,d,c,r,f,q,m,s,y,p,h,xD.h,c,q,p,a,m,s,r,d,f,x,yE.h,q,c,y,a,p,m,s,d,r,f,x61.对由n个记录所组成的表按关键码排序时,下列各个常用排序算法的平均比较次数分别是:二路归并排序为(1),直接插入排序为(2),快速排序为(3),其中,归并排序和快速排序所需要的辅助存储分别是(4)和(5)。【上海海运学院1998二、4(5分】1-5:A.0(1)B.0(nlogdi)C.0(n)D.0(n2)E.0(n(log2n)2)F.0(log2n)62,将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是()A.NB.2N-1C.2ND.N-1【中科院计算所1998二、7(2分)】【中国科技大学1998二、7(2分】63.基于比较方法的n个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是()oA.O(nlogn)B.O(logn)C.0(n)D.0(n*n)【南京理工大学1996—、2(2分】64.已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为()oA.0(nlog2n)B.O(nlogzk)C.0(klog2n)D.O(klogik)【中国科技大学1998二、
=k;10REPEATj:=j-lUNTILlist[j].key<=k;11IFi
此文档下载收益归作者所有