1、数据结构练习题习题1 绪论1.1 单项选择题1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的 、数据信息在计算机中的 以及一组相关的运算等的课程。 A操作对象计算方法逻辑结构数据映象 A存储结构 关系 运算 算法2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是 的有限集合,R是D上的 有限集合。 A算法 数据元素 数据操作 数据对象 A操作 映象 存储 关系3. 在数据结构中,从逻辑上可以把数据结构分成 。A动态结构和静态结构 紧凑结构和非紧凑结构 线性结构和非线性结构 内部结构和外部结构4. 算法分析的目的是 ,算法分析的两个主要方面是
2、。 A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 A. 空间复杂性和时间复杂性 B. 正确性和简明性C. 可读性和文档性 D. 数据复杂性和程序复杂性5. 计算机算法指的是 ,它必具备输入、输出和 等五个特性。 A. 计算方法 B. 排序方法C. 解决问题的有限运算序列 D. 调度方法 A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性1.2 填空题(将正确的答案填在相应的空中)1. 数据逻辑结构包括 、 和 三种类型,树形结构和图形结构合称为
3、。2. 在线性结构中,第一个结点 前驱结点,其余每个结点有且只有 个前驱结点;最后一个结点 后续结点,其余每个结点有且只有 个后续结点。3. 在树形结构中,树根结点没有 结点,其余每个结点有且只有 个直接前驱结点,叶子结点没有 结点,其余每个结点的直接后续结点可以 。4. 在图形结构中,每个结点的前驱结点数和后续结点数可以 。5. 线性结构中元素之间存在 关系,树形结构中元素之间存在 关系,图形结构中元素之间存在 关系。6. 算法的五个重要特性是_ _ , _ _ , _ _ , _ _ , _ _。7. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是_ _。for (i=0
4、;in;i+) for (j=0;jn; j+) Aij=0;8. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是_ _。for (i=0;in;i+) for (j=0; ji; j+)Aij=0;9. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是_ _。s=0;for (i=0;in;i+) for (j=0;jn;j+) for (k=0;kn;k+) s=s+Bijk;sum=s;10. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是_ _。i=s=0;while (sn) i+; s+=i; /s=s+i 11. 分析下面算法(程
5、序段)给出最大语句频度 ,该算法的时间复杂度是_ _。i=1;while (inext= =NULLC. head-next= =head D. head!=NULL8. 带头结点的单链表head为空的判定条件是_。A. head= =NULL B. head-next= =NULLC. head-next= =head D. head!=NULL9. 非空的循环单链表head的尾结点(由p所指向)满足_。A. p-next= =NULL B. p= =NULLC. p-next= =head D. p= =head 10. 在双向循环链表的p所指结点之后插入s所指结点的操作是_。A. p-r
6、ight=s; s-left=p; p-right-left=s; s-right=p-right;B. p-right=s; p-right-left=s; s-left=p; s-right=p-right;C. s-left=p; s-right=p-right; p-right=s; p-right-left=s;D. s-left=p; s-right=p-right; p-right-left=s; p-right=s; 11. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行_。A. s-next=p-next; p-next=s; B. p
7、-next=s-next; s-next=p;B. q-next=s; s-next=p; C. p-next=s; s-next=q;12. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行_。A. s-next=p; p-next=s; B. s-next=p-next; p-next=s;C. s-next=p-next; p=s; C. p-next=s; s-next=p;13. 在一个单链表中,若删除p所指结点的后续结点,则执行_。A. p-next= p-next-next; B. p= p-next; p-next= p-next-next;C. p-n
8、ext= p-next; D. p= p-next-next;14. 从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较_个结点。A. n B. n/2 C. (n-1)/2 D. (n+1)/2 15. 在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是_ _。A. O(1) B. O(n) C. O (n2) D. O (nlog2n) 16. 给定有n个元素的向量,建立一个有序单链表的时间复杂度是_ _。A. O(1)) B. O(n) C. O (n2) D. O (n*log2n)2.2 填空题(将正确的答案填在相应的空中)1. 单链
9、表可以做_ _的链接存储表示。2. 在双链表中,每个结点有两个指针域,一个指向_ _,另一个指向_ _。3. 在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作:q=head;while (q-next!=p) q=q-next;s= new Node; s-data=e;q-next= ; /填空s-next= ; /填空4. 在一个单链表中删除p所指结点的后继结点时,应执行以下操作:q= p-next;p-next= _ _; /填空delete ; /填空5. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行s-next=_ _和p-next=_的操作。
10、 6. 对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是_ _;在给定值为x的结点后插入一个新结点的时间复杂度是_ _。2.3 算法设计题:1.设顺序表va中的数据元数递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。Status Insert_SqList(SqList &va,int x) if(va.length+1maxsize) return ERROR; va.length+; for(i=va.length-1;va.elemix&i=0;i-) va.elemi+1=va.elemi; va.elemi+1=x; return
11、OK; 2.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1, a2,. an)逆置为(an, an-1,., a1)。void reverse(int a, int size) int i,j,tmp; for(i=0, j=size-1; inext; while(q!=L & q-datanext;while(q!=L & q-datanext;free(r); if(p!=q)p-next=q;4. 试写一算法,实现单链表的就地逆置(要求在原链表上进行)。void converse(NODEPTR L) NODEPTR p,q; p=L-next; q=p-next
12、; L-next=NULL; while(p) /* 对于当前结点p,用头插法将结点p插入到头结点之后 */ p-next=L-next; L-next=p; p=q; q=q-next; 习题答案 2.1 1. B 2. A, C 3. B 4. D 5. C 6. A 7. A 8. B 9. C 10. D 11.B 12.B 13.A 14.D 15.B 16.C 2.2 1. 线性结表 2. 前驱结点、后继结点 3. s, p 4. q-next, q 5. p-next, s 6. O (1) , O (n)习题3 栈和队列3.1 单项选择题1. 一个栈的入栈序列a,b,c,d,e
13、,则栈的不可能的输出序列是_。 A. edcba B. decba C. dceab D. abcde 2. 若已知一个栈的入栈序列是1,2,3,n,其输出序列为p1,p2,p3,pn,若p1=n,则pi为_。 A. i B. n=i C. n-i+1 D. 不确定3. 栈结构通常采用的两种存储结构是_。A. 顺序存储结构和链式存储结构B. 散列方式和索引方式C. 链表存储结构和数组D. 线性存储结构和非线性存储结构4. 判定一个顺序栈ST(最多元素为m0)为空的条件是_。A. top !=0 B. top= =0 C. top !=m0 D. top= =m0-15. 判定一个顺序栈ST(最
14、多元素为m0)为栈满的条件是_。A. top!=0 B. top= =0 C. top!=m0 D. top= =m0-16. 栈的特点是_,队列的特点是_。 A. 先进先出 B. 先进后出7. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行_ _。(不带空的头结点)A. HSnext=s;B. snext= HSnext; HSnext=s;C. snext= HS; HS=s;D. snext= HS; HS= HSnext;8. 从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行_ _。(不带空的头结点) A. x=HS; HS= HSnext; B. x
15、=HSdata;C. HS= HSnext; x=HSdata; D. x=HSdata; HS= HSnext;9. 一个队列的数据入列序列是1,2,3,4,则队列的出队时输出序列是_ 。 A. 4,3,2,1 B. 1,2,3,4 C. 1,4,3,2 D. 3,2,4,110. 判定一个循环队列QU(最多元素为m0)为空的条件是_。A. rear - front= =m0 B. rear-front-1= =m0C. front= = rear D. front= = rear+111. 判定一个循环队列QU(最多元素为m0, m0= =Maxsize-1)为满队列的条件是_。A. (r
16、ear- front)+ Maxsize)% Maxsize = =m0B. rear-front-1= =m0 C. front= =rear D. front= = rear+112. 循环队列用数组A0,m-1存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是_。A. (rear-front+m)%m B. rear-front+1C.rear-front-1 D. rear-front13. 栈和队列的共同点是_。A. 都是先进后出 B. 都是先进先出C. 只允许在端点处插入和删除元素 D. 没有共同点3.2 填空题(将正确的答案填在相应的空中)1. 向量
17、、栈和队列都是_结构,可以在向量的_位置插入和删除元素;对于栈只能在_插入和删除元素;对于队列只能在_插入元素和_删除元素。2. 向一个长度为n的向量的第i个元素(1in+1)之前插入一个元素时,需向后移动_个元素。3. 向一个长度为n的向量中删除第i个元素(1in)时,需向前移动_个元素。4. 在具有n个单元的循环队列中,队满时共有_个元素。 习题答案3.1 1. C 2. C 3. A 4. B 5.D 6. BA 7.C 8. B 9. C 10. C 11. A 12. A 13.C 3.2 1. 线性、任何、栈顶、队尾、队首 2. n-i+1 3. n-i 4. n-1 习题6 树和
18、二叉树6.1 单项选择题1. 由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法_。A. 正确 B. 错误2. 假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为 个。 A15 B16 C17 D473. 按照二叉树的定义,具有3个结点的不同形状的二叉树有_种。A. 3 B. 4 C. 5 D. 64. 按照二叉树的定义,具有3个不同数据结点的不同的二叉树有_种。A. 5 B. 6 C. 30 D. 325. 深度为5的二叉树至多有_个结点。A. 16 B. 32 C. 31 D. 106. 设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树
19、中所包含的结点数至少为_ _。A. 2h B. 2h-1 C. 2h+1 D. h+17. 对一个满二叉树,m个树叶,n个结点,深度为h,则_ 。A. n=h+m B. h+m=2n C. m=h-1 D. n=2 h-18. 任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序_。A.不发生改变 B.发生改变 C.不能确定 D.以上都不对9. 如果某二叉树的前根次序遍历结果为stuwv,中序遍历为uwtvs,那么该二叉树的后序为_。 A. uwvts B. vwuts C. wuvts D. wutsv10. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法_。
20、A. 正确 B. 错误11. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_。A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca12. 在一非空二叉树的中序遍历序列中,根结点的右边_。A. 只有右子树上的所有结点 B. 只有右子树上的部分结点C. 只有左子树上的部分结点 D. 只有左子树上的所有结点13. 如图6.1所示二叉树的中序遍历序列是_。A. abcdgef B. dfebagc C. dbaefcg D. defbagcgcefdbaagedbchf图6.2 图6.
21、1 a14. 一棵二叉树如图6.2所示,其中序遍历的序列为_ _。A. abdgcefh B. dgbaechf C. gdbehfca D. abcdefgha15设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是 。Aa在b的右方Ba在b的左方Ca是b的祖先Da是b的子孙16. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是_。 A. acbed B. decab C. deabc D. cedba17. 实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用_存储结构。A. 二叉链表 B. 广义表存储结构 C. 三叉链
22、表 D. 顺序存储结构18. 如图6.3所示的4棵二叉树,_不是完全二叉树。(A) (B) (C) (D)图6.320. 在线索化二叉树中,t所指结点没有左子树的充要条件是_。A. tleft=NULL B. tltag=1C. tltag=1且tleft=NULL D. 以上都不对21. 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后续的线索,这种说法_。 A. 正确 B. 错误22. 二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法_。 A. 正确 B. 错误23. 具有五层结点的二叉平衡树至少有_个结点。A. 10 B. 12 C. 1
23、5 D. 1724. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵数对应的二叉树。结论_是正确的。A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同D.以上都不对25. 树最适合用来表示_。A. 有序数据元素 B. 无序数据元素 C. 元素之间具有分支层次关系的数据 D. 元素之间无联系的数据6.2 填空题(将正确的答案填在相应的空中)1. 有一棵树如图6.5所示,回答下面的问题:k1 11
24、kkkkkk21 4356 7 这棵树的根结点是_; 这棵树的叶子结点是_; 结点k3的度是_;图6.5 一棵树 这棵树的度是_; 这棵树的深度是_; 结点k3的子女是_; 结点k3的父结点是_ 2. 指出树和二叉树的三个主要差别_、_、_。_;3. 从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是_ _。123456789101112131415161718192021eafdgcjlhb图6.6 一棵二叉树的顺序存储数组t4. 一棵二叉树的结点数据采用顺序存储结构,存储于数组t中,如图6.6所示,则该二叉树的链接表示形式为_ _。5. 深度为k的完全二叉树至少有_个
25、结点。至多有_个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是_。6. 在一棵二叉树中,度为零的结点的个数为n 0,度为2的结点的个数为 n 2,则有n0=_。7. 一棵二叉树的第i(i1)层最多有_个结点;一棵有n(n0)个结点的满二叉树共有_个叶子和_个非终端结点。8. 结点最少的树为_,结点最少的二叉树为_。9. 现有按中序遍历二叉树的结果为abc,问有_种不同形态的二叉树可以得到这一遍历结果,这些二叉树分别是_。10. 由如图6.7所示的二叉树,回答以下问题:iaedbchHf图6.7 一棵二叉树i 其中序遍历序列为_; 其前序遍历序列为_; 其后
26、序遍历序列为_;6.3 简答题1. 根据二叉树的定义,具有三个结点的二叉树有5种不同的形态,请将它们分别画出。2. 假设一棵 二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。gcefdba图6.8 一棵树请画出该树。3. 由如图6.7所示的二叉树,回答以下问题:(1)画出该二叉树的中序线索二叉树;(2)画出该二叉树的后序线索二叉树;(3)画出该二叉树对应的森林。4. 已知一棵树如图6.8所示,转化为一棵二叉树,表示为_。5. 以数据集4,5,6,7,10,12,18为结点权值,画出构造Huffman树的每一步图示,计算其带权路径长度为。6. 一棵含有N个结点的k叉树
27、,可能达到的最大深度和最小深度各为多少?7. 证明:一棵满k叉树上的叶子结点数n和非叶子结点数n之间满足以下关系: n=(k-1)n+16.4 算法设计题1. 编写按层次顺序(同一层自左至右)遍历二叉树的算法。2试编写算法,对一棵二叉树,统计叶子的个数。3试编写算法,对一棵二叉树根结点不变,将左、右子树进行交换,树中每个结点的左、右子树进行交换。7. 假设用于通讯的电文仅有八个字母(a,b,c,d,e,f,g,h)组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10。试为这八个字母设计哈夫曼编码。使用0-7的二进制表示形
28、式是另一种编码方案。对于上述实例,比较两种方案的优缺点。8. 试编写算法,对一棵以孩子-兄弟链表表示的树统计叶子的个数。假设一棵 二叉树的先序序列为EBADCFHGIKJ和中序序列为ABCDEFGHIJK。请画出该树。 习题答案6.1 1. B 2. B 3. C 4. C 5. C 6. A 7. D 8. A 9. C 10. A11. D 2. A 13. B 14. B 15. B 16. D 17. C 18. C 19. B 20. B 21. B 22. B 23. B 24. A 25. C 6.2 1. k1 k2,k5,k7,k4 2 3 4 k5,k6 k1 eaEfjc
29、dlghb图6.92. 树的结点个数至少为1(不同教材规定不同),而二叉树的结点个数可以为0;树中结点的最大度数没有限制,而二叉树结点的最大度数为2;树的结点无左、右之分,而二叉树的结点有左、右之分;3. 树可采用孩子-兄弟链表(二叉链表)做存储结构,目的并利用二叉树的已有算法解决树的有关问题。4. 如图6.9所示 5. 2 k-1 、 2 k-1 、 2 k-2+1 6. n2+1 7. 2 i-1 2log2n+1-1 2log2n+1 1 8. 只有一个结点的树;空的二叉树9. 5;如图6.10所示a图6.10 树形5种aaaacccccbbbbbb10. dgbaechif 、abdg
30、cefhi 、gdbeihfca 、6.3 1. 5种, 图6.11EBEFAECDKGHIJ图6.12图6.11 树形5种2. 二叉树如图6.12所示。3. 中序线索二叉树如图6.13(左)所示;后序线索二叉树如图6.13(右)所示;该二叉树转换后的的森林如图6.14所示。图6.13a 11dhjbkc 图 6.14 对应的森林iefabcedig图 6.15 一棵树的孩子兄弟表示4. 图6.8的树转化为一棵二叉树如下,图6.15:5. 画出构造Huffman树如图6.16所示,计算其带权路径长度为 。6. 一棵含有N个结点的k叉树,可能达到的最大深度 h=N-k+1 ,最小深度各为: lo
31、gkN+1。623725191813121096745图6.16 Huffman树习题7 图7.1 单项选择题1在一个图中,所有顶点的度数之和等于所有边数的_倍。A. 1/2 B. 1 C. 2 D. 4 2任何一个无向连通图的最小生成树 。A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在3在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的_倍。A. 1/2 B. 1 C. 2 D. 44一个有n个顶点的无向图最多有_条边。A. n B. n(n-1) C. n(n-1)/2 D. 2n5具有4个顶点的无向完全图有_条边。A. 6 B. 12 C. 16 D. 206具有6个顶
32、点的无向图至少应有_条边才能确保是一个连通图。A. 5 B. 6 C. 7 D. 87在一个具有n个顶点的无向图中,要连通全部顶点至少需要_条边。A. n B. n+1 C. n-1 D. n/28对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是_。A. n B. (n-1)2 C. n-1 D. n29对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为_;所有邻接表中的接点总数是_。 A. n B. n+1 C. n-1 D. n+e A. e/2 B. e C.2e D. n+e 10已知一个图如图7.1所示,若从顶点a出发按深度搜索法进行遍历,则可能得到的一种顶点序列为_;按宽度搜索法进行遍历,则可能得到的一种顶点序列为_。 A. a,b,e,c,d,f B. e,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,bbaecdf A. a,b,c,e,d,f B. a,b,c,e,f,d C. a,e,b,c,f,d D. a,c,f,d,e,b图 7.1 一个无向图11已知一有向图的邻接表存储结构如图7.2所示。12345324524
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100