1、数据结构复习题2、选择题1)数据结构通常是研究数据的( A )及它们之间的相互联系。A.存储结构和逻辑结构 B. 存储和抽象 C. 联系和抽象 D. 联系与逻辑2)在逻辑上可以把数据结构分成: ( C )。A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构C. 线性结构和非线性结构 D. 内部结构和外部结构3)数据在计算机存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为( C )。B.正确性和简明性D.数据复杂性和程序复杂性C.O(log2n)D. O( n2)C. 顺序存储结构 D. 链式存储结A. 存储结构 B. 逻辑结构4)算法分析的两个主要方面是( A )。A. 空间复杂性
2、和时间复杂性C. 可读性和文档性5)下列时间复杂度中最坏的是( D )。A. O(1) B. O( n)6)等概率情况下,在有n 个结点的顺序表上做插入结点运算,需平均移动结点的数目为C )。AnB(n-1)/2C n/2D(n+1)/2( 7 )设有编号为 1, 2, 3, 4的四辆列车,顺序进入一个栈结构的站台,下列不可能的出站顺序为 (D )A 1234B 1243C 1324D 1423( 8 )如果以 链表作为 栈的存储 结构,则出栈 操作时(B )A.必须判别栈是否 满B.必须判别栈是否空C.必须判别栈元素 类型D 队栈 可不做任何判别( 9)链栈与 顺序栈相 比,有一 个比较明显
3、的 优点是(B ) 。A插入操作更加 方便B 通常不 会出现栈满的情 况。C不会出现栈空的情 况D 删除操 作根加方便10)插入和删除只能 在一端进行的线性表, 称为 ( C)。A队列B循环队列C.栈 D.循环 栈11)若进队的序列为:A, B,C, D,则出队的序列是(C )。AB, C,D, AB A, C, B,DCA, B,C, DD C, B , D ,A(12)若用一个大小为6的数组来实现循环队列,且当前 front和rear的值分别为3和0,当从队列中删 除一个 元素,再加入两 个元素 后,front和rear的值分别为(B )。A. 5和 1 B . 4和 2 C. 2和 4(
4、13 ) S=morning,执行求子串函数SubStr(S,2,2)后的结果为(B )。A mo B or Cin Dng14 ) S1=good , S2=morning , 执 行 串 连 接 函 数 ConcatStr(S1,S2) 后 的 结 果 为 ( 15 ) S1=good , S2=morning , 执 行 函 数 SubStr(S2,4,LenStr(S1) 后 的 结 果 为 ( B ) 。A good B ningC go D morn( 16 ) 设 串 S1=ABCDEFG , S2=PQRST ,则 ConcatStr(SubStr(S1,2,LenStr(S2
5、),SubStr(S1,LenStr(S2),2) 的 结 果 串 为 ( D ) 。A BCDEF B BCDEFG C BCPQRST D. BCDEFEF(17) 已知二维数组 A610 ,每个数组元素占 4个存储单元,若按行优先顺序存 放数组元素a35的存储地址是1000,则a00的存储地址是( B )。A872 B 860 C868 D 864( 18 )在一棵具有五层的满二叉树中,结点的总数为( B )A16 B 31 C32 D33( 19 )具有 64 个结点的完全二叉树的深度为( C )A 5 B 6 C7(20)具有n (n1)个结点的完全二叉树中,结点 i ( 2i n)
6、的左孩子结点是( D )。A. 2i B. 2i+1 C. 2i-1 D.不存在(若2iprior- n ext=p next(5)A+B/C-D*E 的后缀表达式是: ABC/+DE*- 。(6)解决顺序队列“假溢出”的方法是采用 循环队列 。(7)循环队列的队首指针为 front,队尾指针为 rear,则队空的条件为 front =rear 。(8)设循环队列的头指针 front指向队首元素,尾指针 rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN ,则队满标志为: fron t=(rear+1)%MAXLEN 。(9)设循环队列的容量为 40 (序号从0到39),现经过
7、一系列的入队和出队运算后,有front=11,rear=19,则循环队列中还有 8 个元素。(L= (N+ rear front)% N=(40 + 19 11) % 40=8)(10)设 S=My Music,贝U LenStr(s)= _8 。(11) 两个字符串分别为 : S仁Today is , S2=30July,2005,Co ncatStr(S1,S2) 的结果是: Today is 30 July.2005 。(12)求子串函数 SubStr(Today is 30 July,2005,13,4) 的结果是:July 。(13)在串的运算中,EqualStr(aaa,aab)
8、的返回值为 data= x ;p=head-n ext;while (p!=NULL) & ( p-data!=a )_p=p-next ;if (p=NULL)coutnext=p-next_ _: p-n ext=s :(2)假定用一个循环单链表表示一个循环队列, 该队列只设一个队尾指针 rear,试填空完成向循环队列中插入一个元素为 x的结点的函数。typedef struct queue node /定义队列的存储结构 int data;struct queue node *n ext;QueueNode;InQueue(QueueNode *rear,int x) /向队列插入元素为
9、 x的函数 QueueNode *rear;QueueNode *head,*s;s= new QueueNode ;s-data= x ;if(rear=NULL) /循环队列为空,则建立一个结点的循环队列 rear=s; rear-n ext;else head= rear-next ; /循环队列非空,则将 s插到后面rear-n ext= s ;rear=s;rear-n ext =head;(3)下面程序是把两个串 r1和r2首尾相连的程序,即:r1=r1+r2,试完成程序填空。typedef Struct char vecMAXLEN;int len;/定义合并后串的最大长度/ l
10、en为串的长度Stvoid Con catStr(Str *r1,Str *r2) int i;coutvecvec;/字符串连接函数if(r1-le n+r2-le n MAXLEN )cout两个串太长,溢出!else for(i=0;ile n ;i+)/把r2连接到r1r1-vec r1-le n+i =r2-veci;r1-vecr1-le n+i= 0;r1-le n= r1-le n+r2-le n ;/添上字符串结束标记/修改新串长度(4)下面算法是判断字符串是否为回文(即正读和倒读相同),试完成程序填空。#i nclude stdio.h typedef struct cha
11、r vecMAXLEN; int len;str;void Pali ndrome (str s) int i=0;ing j= 一s.le n-1while ( j-i=1 ) if ( s.veci= s.vecj)/ (或 j=j+1 )i+; j- ;con ti nueelsebreak;if ( j-i=1 )coutIt is not a pali ndromen;elsecoutIt is a pali ndromen;(5)void BlnsSort()/按递增序对R1R n 进行二分插入排序 int i, j, low, high, m;for( i=2;i= n ; i+
12、) R0=Ri;low=1;high= n ;while(low _=_ high) _ =(low+high)/2 _ ;if(R0=high+1;j-)Rj+1= R j ;Rhigh=R0;/设定R0为监视哨/元素后移/插入四、应用题(1)已知一棵二叉树的后序遍历和中序遍历的序列分别为:请画出该二叉树,并写出它的前序遍历的序列。ACDBGIHFE和 ABCDEFGH。解:恢复的二叉树为:EBFHC范本可其前序遍历的序列为: E B A D C F H G I(2) 把下列一般树转换为二叉树(3)把下列森林转换为二叉树解:ABGCHIE解:(5)假设用于通信的电文仅由 频率分别为7, 19
13、, 2, 解:以权值:2、3、6、6, 32,A、B、C、D、E、F、G 8个字母组成,字母在电文中出现的21, 10。试为这8个字母设计哈夫曼编码。(左子为0,右子为1。)3,19、21、32构造哈夫曼树:7、10、100100(281 001编辑范本1字母编号 1对应编码出现频率A10107B0019C100002D10016E1132D100013E0121F101110(6)有向图如下图所示,画出邻接矩阵和邻接表解:邻接矩阵邻接表(0,2), (0,4), (0,5), (1,2),(2,3), (2,4), (3,4), (4,5)。试画出该无向图,并从顶点 0出发,分别写出按深度优
14、先搜索和按广度优先搜索进行遍历的结点序列。解:从顶点0岀发的深度优先搜索遍历的结点序列: 0 1 2 3 4 5 (答案不唯一)从顶点0岀发的广度优先搜索遍历的结点序列: 0 1 2 4 5 3 (答案不唯一)(8)网G的邻接矩阵如下,试画出该图,并画出它的一棵最小生成树。0 8 10 11 08 0 3 0 13103 0 4 0110 4 0 70 13 0 7 0(1)试构造一棵二叉排序树;(2)求等概率情况下的平均查找长度 ASL解:(1)构造二叉排序树(2) ASL=(1*1+2*2+3*4+4*3)/10=2.9设散列函数为:H( K) =K % 11。试画出平方探测再散列解决冲突
15、时所构造的散列表,并求出其平均查找长度。解:平方探测再散列解决冲突时所构造的散列表。0123456789 10112234792167298 平均查找长度 ASL=( 1*5+2*4)/9 = 139 = 53 (或 1.44)(12)已知数据序列12,02,16,30,28,10,17, 20,06,18,写出希尔排序每一趟排 序的结果。(设d=5、2、1)d=2 | | | 12 02 16 06 17 12 18 20 30 28d=1 02 06 10 12 16 17 18 20 28 30(13)已知数据序列10,18, 4, 3,6, 12,9, 15,写出二路归并排序的每一趟排
16、序结果。10184 3 6 12 9 151_1 M101834 612915第一趟排序结果3410186912115第二趟排序结果346910121518第三趟排序结果(14)已知数据序列53, 36, 48, 36, 60, 7, 18 , 41,写出采用简单选择排序的每一趟 排序结果。解: 533648366071841(7)316 483660531841(718)483660533641(71836)4860533641(7183636)60534841(718363641)1;534860(71836364148)15360(7183636414853)60(718363641485360)(15)已知数据序列10, 1,15,18,7,15,试画出采用快速排序法,第一趟排序的结果。解:+ 10 1 15 18 4 |15low | J high交换-J可编辑范本1 15low1810 15high第一趟排序结果: 7交换1 10 18 1515low high五、程序设计 第二章一个,第六章一个