数据结构期末复习练习题答案_第1页
数据结构期末复习练习题答案_第2页
数据结构期末复习练习题答案_第3页
数据结构期末复习练习题答案_第4页
数据结构期末复习练习题答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构期末复习练习题答案(仅供参考)第一章 绪 论一、单选题1. A 2. C 3. B 4. C 5. D 6. B 二、填空题1. 集合结构、线性结构、树型结构、图形结构 2.顺序、链式 3. 1:1、1:N、M:N 4.数据定义、操作声明 5.引用形参(或指针形参 ) 6.引用类型 ( 或 指针类型 ) 7.实参、值 8.stdio.h、file.h 9.stdlib.h、rand( ) %21 10. sizeof(a)、a+i*sizeof(a0)、a+i11. 参数类型、数量、次序 12. 2、用户自定义 13. = = 、ra 、rb 14. O(n)、O(m*n)15. n、

2、n(n+1)/2、O(n2) 16. O(n)第二章 线性表 一、单选题1. B 2. A 3. C 4. B 5. D 6. C二、填空题1.元素值、指针 2.( 38,56,25,60,42,74) 3. O(n)、O(1) 4.(1)、O(n) 5.i-1、i+1p->next 、ap.next 7.表头 8.前驱、后继 9.表尾、表头 10HL->next = = NULL 、HL->next = = HL三、应用题1.(1) ( 79 , 62 , 34 , 57 , 26 , 48 ) (2) ( 26 , 34 , 48 , 57 , 62 , 79 ) (3)

3、 ( 26, 34 , 39 , 48 , 57 , 62 )212,26,9,8,15,30,50)3(1) ElemType DMValue( List & L ) if ( ListEmpty(L) ) / 空线性表 cerr <<"List is Empty!"<<endl; exit(1);ElemType x; / x存放最小元素x = L.list0;int k = 0; / k存放最小元素的下标for ( int i = 1; i<L.size; i+ ) / 查找最小元素 if ( L.listi < x ) x

4、 = L.listi ; k = i; L.listk = L.listL.size-1; / 最后一个元素填补最小元素位置L.size-; / 线性表长度减1return x; / 返回最小元素 2)ElemType Delete( List & L, int i ) if ( i<1 | i>L.size ) / 判断i的合法性printf("Index is out range!n”);exit(1); ElemType x = L.listi-1; / 保存被删除元素 for ( int j = i-1; j<L.size-1; j+ ) / 元素向

5、前移动 L.listj = L.listj+1; L.size-; / 长度减1 return x; / 返回被删元素 (3)void Insert( List & L, int i, ElemType x ) if ( i<1 | i>L.size+1 ) / 判断i的合法性printf("Index is out range!n");exit(1); if ( L.size = MaxSize ) / 判断线性表满 printf("List overflow!n");exit(1); for ( int j = L.size-1

6、; j>=i-1 ; j- ) / 元素后移,产生插入位置L.listj+1 = L.listj; L.listi-1 = x; / 元素插入 L.size+; / 长度加1 (4) void Delete( List & L, ElemType x ) int i = 0; while ( i<L.size ) if ( L.listi = x ) / 删除x元素for ( int j = i+1; j<L.size; j+ ) L.listj-1 = L.listj;L.size-; else i+; / 寻找下一个x元素的位置 4(1)void Delete(

7、LNode * & HL, int i ) if ( i<1 | HL=NULL ) / 判断i的合法性或空链表cerr <<"index is out range!"<<endl;exit(1); LNode * ap , * cp; ap = NULL ; cp = HL ; / cp指向当前结点,ap指向其前驱结点 int j = 1; while ( cp != NULL ) / 查找第i个结点 if ( j = i ) / 找到第i个结点break; / cp指向的结点即为第i个结点 else / 继续向后寻找ap = cp;

8、cp = cp->next;j+; if ( cp = NULL ) / 没有找到第i个结点cerr <<"Index is out range!"<<endl;exit(1); if ( ap = NULL ) / 删除第1个结点(即i=1) HL = HL->nextl else ap->next = cp->next; / 删除第i个结点 delete cp; / 释放被删除结点的空间 (2)void Insert( LNode * & HL, const ElemType & x ) LNode * n

9、ewptr = new LNode; / 申请一个新结点 if ( newptr = NULL ) / 分配失败cerr <<"Memory allocation failare!"<<endl;exit(1); newptr->data = x; if ( HL = NULL | x<HL->data ) / 空表 或 x小于表头结点,newptr->next = HL; / 作为新表头结点插入HL = newptr;return; / 查找插入位置 LNode * cp = HL->next; / 用cp指向当前结点

10、(即待查结点) LNode * ap = HL; / 用ap作为指向当前结点的前驱结点指针 while ( cp != NULL ) if ( x<cp->data) break; / 找到插入位置 else ap = cp; cp = cp->next; / 继续查找插入位置 newptr->next = cp; ap->next = newptr; / 插入新结点 (3)ElemType MaxValue( LNode * HL ) if ( HL = NULL ) / 空表 cerr <<"Linked list is empty!&q

11、uot;<<endl; exit(1);ElemType max = HL->data;LNode * p = HL->next;while ( p != NULL ) / 寻找最大值 if ( max < p->data ) max = p->data; p = p->next;return max; (4)int Count( LNode * HL , ElemType x ) int n = 0; LNode * p = HL; while ( p != NULL ) if ( p->data = x ) n+; p = p->

12、next; return n; 第三章 稀疏矩阵和广义表 一、单选题1. A 2. B二、填空题1.行号、列号、元素值 2.行号、列号 3.引用 (或指针) 4.等于 5.4 、5 6.列号、行号 7. 单、表 8. 括号 9. 3 10. 元素值、子表指针 11. true、NULL三、应用题1(1) ( (1,2,4),(2,4,-3),(2,7,1),(3,1,8),(4,4,5),(5,2,-7),(5,6,2),(6,4,6) )12234556247142644-3185-726 (2) (3) (1,3,8),(2,1,4),(2,5,-7),(4,2,-3),(4,4,5),

13、(4,6,6),(6,5, 2),(7,2,1)122444673152465284-7-356212(1) A:长度:1 深度:2 (2) B:长度:3 深度:1 (3) C:长度:2 深度:3 (4) D:长度:2 深度:2 (5) E:长度:3 深度:3 (6) F:长度:1 深度:4第四章 栈和队列 一、单选题1. A 2. B 3. C 4. A 5. B 6. B 7. D 8. D二、填空题1.队尾、队首 2.后进先出(LIFO)、先进先出(FIFO) 3.栈顶指针、存储 4.栈顶元素、栈顶指针5. front = = rear 、(rear+1)%QueueMaxSize =

14、= front 6. -1 、StackMaxSize-17. 栈空、空队、队列只有一个元素 8.新结点的指针域、栈顶指针 9.指针域、栈顶指针 10.队尾指针、存储 11.top = = 0 12.p->next = HS 、HS = p 13. HS = HS->next14. ( front = = rear ) && ( front <>NULL ) 15. 3 4 25 6 15 + - / 8 * +16. (24+8)*3/(4*(10-7) 、8三、应用题 12 15 5 30 18四、编程题递归算法:long Fib( int n )

15、if ( n=1 | n=2 ) / 终止递归条件 return 1;else return Fib(n-1)+Fib(n-2);非递归算法:long Fib( int n ) int a , b , c; / c代表当前项,a和b分别代表当前项前面的第2项和第1项a = b = 1;if ( n = 1 | n = 2 ) return 1;else for ( int i = 3 ; i<=n ; i+ ) c = a+b; / 求当前项 a = b; / 产生第2项 b = c; / 产生第1项 return c; / 返回所求的第n项 递归算法的时间复杂度为 O(2n),空间复杂

16、度为 O(n);非递归算法的时间复杂度为 O(n),空间复杂度为 O(1)。第五章 树和二叉树一、填空题1.n-1 2.5 、50 3. 6 4.31、21 5.10、4、3 6.2、1、1、6 7.B、I和J 8.6 9. 2i、2i+1、? i/2? 10.16 11.5、18 12.a、f、空结点(即无右孩子结点) 13. 4、2、314. a2*i、a2*i+1、ai/2 15. 2i-1、2j+1 16. A2*i+1、a2*i+2、ai/2 17.2n、n-1、n+1 18.10、5 19. abcdef、cbaedf、cbefda、abdcef 20. abecfhijgd、ab

17、cdefghij二、应用题1void Request( int A , int n , int i ) if ( i>n ) cerr <<"编号为"<<i<<"的结点不存在!"<<endl; exit(1);cout <<"当前结点为"<<Ai<<endl;int j = i/2; / 下标为j的结点是下标为i结点的双亲if ( j>0 ) cout <<"双亲:"<<Aj<<end

18、l;else cout <<"树根没有双亲结点!"<<endl;if ( 2*i < n ) cout <<"左孩子:"<<A2*i<<endl; cout <<"右孩子:"<<A2*i+1<<endl;else if ( 2*i = n ) cout <<"左孩子:"<<A2*i<<endl; cout <<"无右孩子!"<<endl

19、;else cout <<"无孩子!"<<endl; 2void Count( BTreeNode * BT , int & C1 , int & C2 ) if ( BT != NULL ) C1+; / 统计所有结点数 if ( BT->left = NULL && BT->right = NULL ) C2+; / 统计叶子结点数 Count( BT->left , C1 , C2 ); Count( BT->right , C1 , C2 ); 3(1) abecfgkdhilmj (2

20、) abcdefghijklm (3) 第六章 二叉树的应用一、单选题1. C 2. B 3. D 4. C 5. A 6. D二、填空题1. 小于、大于等于2. 按升序排列的有序序列3. 找到、左子树、右子树4. 2i+1、2i+25. 最小值、最大值6. 堆尾、堆顶、向下三、应用题 1. 2. 初态:空堆 ( ) 插入38后:( 38 ) 插入64后:( 38 , 64 ) 插入52后:( 38 , 64 , 52 ) 插入15后:( 15 , 38 , 52 , 64 ) 插入73后:( 15 , 38 , 52 , 64 , 73 ) 插入40后:( 15 , 38 , 40 , 64

21、 , 73 , 52 ) 插入48后:( 15 , 38 , 40 , 64 , 73 , 52 , 48 ) 插入55后:( 15 , 38 , 40 , 55 , 73 ,52 , 48 , 64 ) 插入26后:( 15 , 26 , 40 , 38 , 73 ,52 , 48 , 64 , 55 ) 插入12后:( 12 , 15 , 40 , 38 , 26 ,52 , 48 , 64 , 55 ,73 ) 3. 初态堆:( 12 , 15 , 40 , 38 , 26 ,52 , 48 , 64 ) 删除第1个元素后堆:( 15 , 26 , 40 , 38 , 64 , 52 ,

22、 48 ) 删除第2个元素后堆:( 26 , 38 , 40 , 48 , 64 , 52 ) 删除第3个元素后堆:( 38 , 48 , 40 , 52 , 64 ) 删除第4个元素后堆:( 40 , 48 , 64 , 52 ) 4. 哈夫曼树: WPL = 3*4+7*3+8*3+2*4+6*3+10*2+14*2 = 131四、算法设计 1bool Find( BTreeNode * BST , ElemType & item ) while ( BST != NULL ) if ( item = BT->data ) / 找到item = BST->data;re

23、turn true; else if (item<BST->data) BST=BST->left; / 转左子树查找else BST=BST->right; / 转右子树查找 return false; / 没有找到 2( i-1)/2 HBT.heapi = HBT.heapj i = j第七章 图一、填空题1.2 2、n(n-1)/2、n(n-1)3、n-1 4、邻接矩阵、邻接表、边集数组 5、n*n ( 或 n行n列 ) 6、e、2e 7、出边、入边 8、e、e 9、O(n)、O(e/n)、O(e) 10、O(n2)、O(n)+O(e)、O(e)+O(n)11、

24、O(n2)、O(e) 12、014253、012345 13、ABCDE、ABCED 14、22 15、(0,1)5,(1,3)3,(3,2)6,(1,4)8 16、(1,3)3,(0,1)5,(3,2)6,(1,4)817、链栈 18、n、n-1二、应用题 1 (1) 采用邻接矩阵表示得到的顶点序列如下表所示:图深度优先序列广度优先序列G40 1 2 8 3 4 5 6 7 90 1 4 2 7 3 8 6 5 9G50 1 2 5 8 4 7 3 60 1 3 4 2 6 7 5 8 (2) 采用邻接表表示得到的顶点序列如下表所示:图深度优先序列广度优先序列G40 4 3 8 9 5 6

25、7 1 20 4 1 3 7 2 8 6 9 5G50 4 7 5 8 3 6 1 20 4 3 1 7 5 6 2 8 2唯一的一种拓扑序列为:1 4 0 2 3 5 7 6 8 9第八章 查找一、填空题 1、(n+1)/2、O(n) 2、见p264公式ASL=、O(log2n) 3、37/12 4、顺序、有序 5、1、36.二叉搜索树、理想平衡树7.6、31、19 8、索引、开始地址9、(12,63,36)、(55,40,82)、(23,74)10、3、3、2 11、哈希 12、链接 13、2、7/5 14、5 15、开放定址、链接 16、3、2二、应用题 1(1) 顺序查找: ASL =

26、 ( 1+2+3+25)/25 = 13 (2) 二分查找: ASL = ( 1+2*2+4*3+8*4+10*5 )/25 = 99/25 = 3.96 ( 参见上图的二分查找树 ) 2哈希函数:H(K) = k % m 其中依题意得 m = 13 H( 32 ) = 32 % 13 = 6 H( 75 ) = 75 % 13 = 10 H( 29 ) = 29 % 13 = 3 H( 63 ) = 63 % 13 = 11 H( 48 ) = 48 % 13 = 9H( 94 ) = 94 % 13 = 3 (冲突) 设 d0 = H(K) = H(94) = 3 d1 = ( d0+1

27、) % m = (3+1)%13 = 4 H( 25 ) = 25 % 13 = 12 H( 46 ) = 46 % 13 = 7 H( 18 ) = 18 % 13 = 5 H( 70 ) = 70 % 13 = 5 (冲突) 设 d0 = H(K) = H(70) = 5 d1 = ( d0+1 ) % m = (5+1)%13 = 6 (冲突) d2 = ( d1+1 ) % m = (6+1)%13 = 7 (冲突) d3 = ( d2+1 ) % m = (7+1)%13 = 8 ASL = ( 8*1+1*2+1*4 )/10 = 1.4 3哈希函数:H(K) = k % m 其中

28、依题意得 m = 11H( 32 ) = 32 % 11 = 10H( 75 ) = 75 % 11 = 9H( 29 ) = 29 % 11 = 7 H( 63 ) = 63 % 11 = 8 H( 48 ) = 48 % 11 = 4H( 94 ) = 94 % 11 = 6H( 25 ) = 25 % 11 = 3 H( 46 ) = 46 % 11 = 2 H( 18 ) = 18 % 11 = 7 H( 70 ) = 70 % 11 = 4 ASL = ( 8*1+2*2 )/10 = 1.2三、算法设计 递归算法:int Binsch( ElemType A , int low ,

29、 int high , KeyType K ) if ( low <= hight ) int mid = (low+high)/2; if ( K = Amid.key ) return mid; / 查找成功,返回元素的下标 else if ( K <Amid.key ) return Binsch( A , low , mid-1 , K ); / 在左子表上继续查找 else return Binsch( A , mid+1 , high , K ); / 在右子表上继续查找 else return -1; / 查找失败,返回-1 非递归算法:int Binsch( Ele

30、mType A , int n , KeyType K ) int low = 0 , high = n-1; while ( low <= hight ) int mid = (low+high)/2; if ( K = Amid.key ) return mid; / 查找成功,返回元素的下标 else if ( K <Amid.key ) high = mid-1; / 在左子表上继续查找 else low = mid+1; / 在右子表上继续查找 return -1; / 查找失败,返回-1第九章 排序一、填空题1、插入、堆 2、快速、归并 3、O(n2)、O(n) 4、?

31、n/2?-1、n-1 5、O(log2n)、O(nlog2n) 6、84 79 56 30 40 46 7、O(nlog2n)、O(n2) 8、O(log2n)、O(n) 9、两端、中间10、38 40 46 56 79 80 11、4 4 12、 élog2nù 或 élog2nù+113、O(n)、O(n log2n)、O(n) 14、6、4、8 15、 38 46 56 79 40 80二、应用题 (1) ( 46 ) ( 74 16 53 14 26 40 38 86 65 27 34 ) 初态 ( 46 74 ) ( 16 53 14 26 4

32、0 38 86 65 27 34 ) ( 16 46 74 ) ( 53 14 26 40 38 86 65 27 34 ) ( 16 46 53 74 ) ( 14 26 40 38 86 65 27 34 ) ( 14 16 46 53 74 ) ( 26 40 38 86 65 27 34 ) ( 14 16 26 46 53 74 ) ( 40 38 86 65 27 34 ) ( 14 16 26 40 46 53 74 ) ( 38 86 65 27 34 ) ( 14 16 26 38 40 46 53 74 ) ( 86 65 27 34 ) ( 14 16 26 38 40

33、46 53 74 86 ) ( 65 27 34 ) ( 14 16 26 38 40 46 53 65 74 86 ) ( 27 34 ) ( 14 16 26 27 38 40 46 53 65 74 86 ) ( 34 ) ( 14 16 26 27 34 38 40 46 53 65 74 86 ) (2) ( 46 74 16 53 14 26 40 38 86 65 27 34 ) 初态 ( 14 )( 74 16 53 46 26 40 38 86 65 27 34 ) ( 14 16 )( 74 53 46 26 40 38 86 65 27 34 ) ( 14 16 26 )

34、( 53 46 74 40 38 86 65 27 34 ) ( 14 16 26 27 )( 46 74 40 38 86 65 53 34 ) ( 14 16 26 27 34 )( 74 40 38 86 65 53 46 ) ( 14 16 26 27 34 38 )( 40 74 86 65 53 46 ) ( 14 16 26 27 34 38 40 )( 74 86 65 53 46 ) ( 14 16 26 27 34 38 40 46 )( 86 65 53 74 ) ( 14 16 26 27 34 38 40 46 53 )( 65 86 74 ) ( 14 16 26

35、27 34 38 40 46 53 65 )( 86 74 ) ( 14 16 26 27 34 38 40 46 53 65 74 86 ) (3) ( 46 74 16 53 14 26 40 38 86 65 27 34 ) 初态 构造初始堆过程:(构造大根堆) ( 46 74 16 53 14 34 40 38 86 65 27 26 ) ( 46 74 16 53 65 34 40 38 86 14 27 26 ) ( 46 74 16 86 65 34 40 38 53 14 27 26 ) ( 46 74 40 86 65 34 16 38 53 14 27 26 ) ( 46 86 40 74 65 34 16 38 53 14 27 26

温馨提示

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

评论

0/150

提交评论