1、数据结构测试题数据结构综合测试题一、单选题1. 以下数据结构中哪一个是线性结构?( ) A. 有向图 B. 栈 C. 线索二叉树 D. B树2. 在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。A. HL=p; p-next=HL; B. p-next=HL; HL=p; C. p-next=HL; p=HL; D. p-next=HL-next; HL-next=p; 3. 在一个带有头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=p; p-next=HL; B. p-next=HL; HL=p; C. p-next=HL; p
2、=HL; D. p-next=HL-next; HL-next=p;4. 单链表的每个结点中包括一个指针next,它指向该结点的后继结点。现要将指针q指向的新结点插入到指针p指向的单链表结点之后,下面的操作序列中哪一个是正确的?( ) Aq=p-next; p-next=q-next; B.p-next=q-next;q=p-next C. q-next=p-next; p-next=q; D. P-next=q; q-next=p-next;5. 在一个循环顺序存储的队列中,队首指针指向队首元素的( )位置。 A 前一个 B. 后一个 C. 当前 6. 以下哪一个不是队列的基本运算?( )
3、A.从队尾插入一个新元素 B.从队列中删除第i个元素 C.判断一个队列是否为空 D.读取队头元素的值7. 用链接方式存储的队列,在进行删除运算时( ). A.仅修改头指针 B.仅修改尾指针 C.头、尾指针都要修改 D.头、尾指针可能都要修改8. 对线性表,在下列哪种情况下应当采用链表表示?( ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变9. 字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )个不同的字符串? A.5 B.4 C.6 D.110. 下述哪一条是顺序存储方式的优点?(
4、) A存储密度大 B.插入运算方便 C. 删除运算方便 D.可方便地用于各种逻辑结构的存储表示11. 从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A. O(n) B. O(1) C. O(log2n) D. O(n2)12. 由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为_。 A 24 B 48 C 72 D 5313. 下列关于二叉树遍历的叙述中,正确的是( ) 。A.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点 B若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点 C若一个树叶是
5、某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点 D若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点14. 高度k的二叉树的最大结点数为( ).A2k-1 B.2K+1 C.2K-1 D. 2k-1 15. 下面关于图的存储的叙述中正确的是( ). A用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关 B用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关C. 用邻接矩阵法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关 D用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数
6、无关16. 在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找关键码值10,所需的关键码比较次数为 A.2 B.3 C.4 D.517. 对线性表进行二分法查找,其前提条件是( ).A. 线性表以顺序方式存储,并且按关键码值排好序 B. 线性表以顺序方式存储,并且按关键码值的检索频率排好序C. 线性表以链接方式存储,并且按关键码值排好序 D. 线性表以链接方式存储,并且按关键码值的检索频率排好序18. 下列哪一个关键码序列不符合堆的定义?( )A. a、c、d、g、h、m、p、q、r、x B. a、c、m、d、h、p、x、g、o、r C. a、d、p、r、c
7、、q、x、m、h、g D. a、d、c、m、p、g、h、x、r、q19. 对n个记录的文件进行快速排序,所需要的辅助存储空间为 A. O(1) B. O(1og2n) C. O(n) D. O(n2)20. 在待排序文件已基本有序的前提下,下述排序方法中效率最高的是 A.直接插入排序 B.直接选择排序 C.快速排序 D.归并排序21. 设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果? A. a,g,h,m,n,p,q,x,z B. a,g,m,h,q,n,p,x,z C. g,m,q,a,n,p,x,h,z D. h,g,m,p,a,n,q,x,
8、z22. 下列关于数据结构的叙述中,正确的是( ).A. 数组是同类型值的集合 B. 递归算法的程序结构比迭代算法的程序结构更为精炼C. 树是一种线性结构D. 用一维数组存储二叉树,总是以先序遍历的顺序存储各结点 二、填空题1. 数据的逻辑结构被分为_、_、_和_四种。2. 数据的物理结构被分为_、_、_和_四种。3. 一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n),其数量级表示为_。4. 对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为_,在表尾插入元素的时间复杂度为_。5. 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_,在表尾插入
9、元素的时间复杂度为_。6. 在以HL为表头指针的带表头附加结点的单链表和循环单链表中,链表为空的条件分别为_和_。7. 一个广义表中的元素分为_元素和_元素两类。8. 从一个链栈中删除一个结点时,需要把栈顶结点的_域的值赋给_。9. 进行函数调用时,需要把每个实参的值和调用后的_传送给被调用的函数中。10. 设W为一个二维数组,其每个数据元素占用6个字节,行下标i从0到8 ,列下标j从0到3 ,则二维数组W的数据元素共占用个字节。W中第6 行的元素和第4 列的元素共占用个字节。若按行顺序存放二维数组W,其起始地址为100,则二维数组W的最后一个数据元素的起始地址为。11. 在线性表的单链存储中
10、,若一个元素所在的结点地址为p,则其后继结点的地址为_,若假定p为一个数组a中的下标,则其后继结点的下标为_。12. 在稀疏矩阵所对应的三元组线性表中,每个三元组元素按_为主序、_为辅序的次序排列。13. 栈又称为_表,队列又称为_表。14. 中缀算式(3+4)*2/(8-5)所对应的后缀算式为_。15. 后缀算式4 2 3 * + 10 5 / -的值为_。16. 对于一棵具有n个结点的二叉树,一个结点的编号为i(1in),若它有左孩子则左孩子结点的编号为_,若它有右孩子,则右孩子结点的编号为_,若它有双亲,则双亲结点的编号为_。17. 在一棵高度为5的理想平衡树中,最少含有_个结点,最多含
11、有_个结点。18. 假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J),则树中所含的结点数为_个,树的深度为_,树的度为_。19. 若一棵二叉树中只有叶子结点和左、右子树皆非空的结点,设叶结点的个数为K,则左、右子树皆非空的结点个数是_。20. 在树中,一个结点的直接后继结点的个数称为该结点的_。21. 在n个带权叶子结点构造出的所有二叉树中,带权路径长度最小的二叉树称为_。WPL称为_。22. 对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个_。23. 当向一个小根堆插入一个具有最小值的元素时,需要逐层_调整,直到被调整到_位置为止。24. 在一个堆的顺序存储中,若一个元
12、素的下标为i(0in-1),则它的左孩子元素的下标为_,右孩子元素的下标为_。25. 在一个具有n个顶点的无向完全图中,包含有_条边,在一个具有n个顶点的有向完全图中,包含有_条边。26. 对于一个具有n个顶点和e条边的有向图和无向图,若采用边集数组表示,则存于数组中的边数分别为_和_条。27. 以二分查找方法从长度为12的有序表中查找一个元素时,平均查找长度为_。28. 假定一个线性表为(12,23,74,55,63,40,82,36),若按Key % 3条件进行划分,使得同一余数的元素成为一个子表,则得到的三个子表分别为_、_和_。29. 在线性表的散列存储中,装填因子a又称为装填系数,若
13、用m表示散列表的长度,n表示待散列存储的元素的个数,则a等于_。30. 在一棵m阶B_树上,每个非树根结点的关键字数目最少为_个,最多为_个,其子树数目最少为_,最多为_。31. 表示图的三种常用的存储结构为_、_和_。32. 对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点分别有_个和_个。33. 对用邻接矩阵表示的有向图进行任一种遍历时,其时间复杂度为_。对用邻接表表示的有向图进行任一种遍历时,其时间复杂度为_。34. 对于线性表(70,34,55,23,65,41,20,100)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有_个,
14、散列地址为7的有_个。35. 在索引表中,若一个索引项对应主表的一个记录,则此索引为_索引 ,若对应主表的若干条记录,则称此索引为_索引。36. 向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度_。37. 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为_,整个堆排序过程的时间复杂度为_。38. 快速排序在平均情况下的时间复杂度为_,在最坏情况下的时间复杂度为_。39. 在归并排序中,进行每趟归并的时间复杂度为_,整个排序过程的时间复杂度为_,空间复杂度为_。40. 在快速排序、堆排序、归并排序中,_排序是稳定的。 三、运算题1. 在如下数组A中链接存储了一个
15、线性表,表头指针为A 0.next,试写出该线性表。 a 0 1 2 3 4 5 6 7 data605078903440next43025712. 假定一棵二叉树广义表表示为a(b(c),d(e,f),分别写出对它进行先序、中序、后序、按层遍历的结果。 先序: 中序: 后序: 按层:3. 已知一棵二叉树的先序遍历的结果是ABECDFGHIJ, 中序遍历的结果是EBCDAFHIGJ, 试画出这棵二叉树。4. 铁路进行列车调度时, 常把站台设计成栈式结构的站台,如下图1所示。试问:(1) 设有编号为1,2,3,4的四辆列车, 顺序开入栈式结构的站台, 则可能的出栈序列有多少种?(2) 若进站的四
16、辆列车顺序如上所述, 那么是否能够得到4123这样的出栈序列? 如果不能, 说明为什么不能。如果能, 说明如何得到该序列的(即写出“进栈”或“出栈”的序列)。(3) 若进站的四辆列车顺序如上所述, 那么是否能够得到3421这样的出栈序列? 如果不能, 说明为什么不能。如果能, 说明如何得到该序列的(即写出“进栈”或“出栈”的序列)。图15. 写出下列中缀表达式的后缀形式: (1) A * B * C (2) A + B - C + D (3) A* B + C (4) (A + B) * D + E / (F + A * D) + C6. 画出下列广义表的带有附加表头结点的链接存储结构图,并给
17、出它们的长度和深度。 (1) D=(a,b),(c,d) (2) A=(a,(b,c),(d),e)7. 将一组元素37,56,23,65,22,10,29依次插入一棵空二叉搜索树中,请画出该二叉搜索树。8. 设有序顺序表中的元素依次为017, 094, 154, 170, 275,503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的判定树, 并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。9. 已知一个图的顶点集V和边集E分别为: V=0,1,2,3,4,5,6,7; E=(0,1)8,(0,2)5,(0,3)2,(1,5
18、)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10, (4,6)4,(5,7)20;(1) 按照普里姆算法从顶点0出发得到最小生成树,试写出在最小生成树中依次得到的各条边。(2) 用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。10. 已知一个图的顶点集V和边集E分别为: V=1,2,3,4,5,6,7,8; E=(1,2),(1,3),(2,4),(2,5),(3,6),(3,7),(4,8),(5,8), (6,8),(7,8);若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,则:(1) 给出从1号顶点出发按主教材
19、中介绍的按深度优先搜索遍历的顶点序列(2) 给出从1号顶点出发按主教材中介绍的按广度优先搜索遍历的顶点序列 (提示:先画出对应的图形,然后再运算)。11. 已知一个图的顶点集V和边集E分别为: V=0,1,2,3,4,5,6,7; E=(0,2),(1,3),(1,4),(2,4),(2,5),(3,6),(3,7),(4,7),(4,8), (5,7),(6,7),(7,8);若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,按主教材中介绍的拓朴排序算法进行排序,试给出得到的拓朴排序的序列。(提示:先画出对应的图形,然后再运算)。12. 散列表的地址区间为
20、0-16,散列函数为H(K)=K % 17,采用线性探查法处理冲突,并已将关键字序列26、25、72、38、8、18、59依次存储到了散列表中:(1) 元素59存放在散列表中的地址是多少? (2) 搜索元素59需要比较的次数是多少?13. 已知待散列的线性表为(36,15,40,63,22),散列用的一维地址空间为0.6,假定选用的散列函数是H(K)=K % 7,若发生冲突采用线性探查法处理,试:(1) 计算出每一个元素的散列地址并在下图中填写出散列表;(2) 求出在查找每一个元素概率相等情况下的平均查找长度。012345614. 假定一组记录的排序码为(46,79,56,38,40,80,2
21、5,34),试写出对其进行快速排序的第一次划分的结果。 四、阅读算法,回答问题1. void AE(Stack& S) InitStack(S); Push(S,30); Push(S,40); Push(S,50); int x=Pop(S)+2*Pop(S); Push(S,x); int i,a4=5,8,12,15; for(i=0;i4;i+) Push(S,ai); while(!StackEmpty(S) coutPop(S) ; 该算法被调用后得到的输出结果为:2. void AJ(adjlist GL, int i, int n) Queue Q; InitQueue(Q);
22、 coutiadjvex; if(!visitedj) coutjnext; 该算法的功能为:3. 指出下列算法的功能,并求出时间复杂度:(1) int sum1(int n) int p=1,s=0; for (int i=1;i=n;i+) p*=i;s+=p; return s; (2) int sum2(int n) int s=0; for (int i=1;i=n;i+) int p=1; for (int j=1;j=i;j+) p*=j; s+=p; return s; 4. 在下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType为int,并假定每个程序
23、段是连续执行的。试写出每个程序段执行后所得到的线性表La。(1) InitList(La); Int a=48,26,57,34,62,79; For (i=0;i6;i+)Insert(La,ai); TraverseList(La);(2) Insert(La,56);DeleteFront(La);InsertRear(La, DeleteFront(La); TraverseList(La);(3) For (i=1;i=3;i+) Int x=GetElem(La,i); If (x%2=0) Delete(La,x); TraverseList(La);(4) ClearList(
24、La); For (i=0;i6;i+) InsertRear(La,ai); Delete(La,a5); Sort(La); Insert(La,a5/2); TraverseList(La); 五、算法填空,在画有横线的地方填写合适的内容。1. 向单链表的末尾添加一个元素的算法。Void InsertRear(LNode*& HL,const ElemType& item)LNode* newptr;newptr=new LNode;If (_)cerrMemory allocation failare!data=item;_=NULL;if (HL=NULL) HL=newptr;el
25、seLNode* P=HL;While (P-next!=NULL) _;p-next=newptr; 2. 向以BST为树根指针的二叉搜索树上插入值为item的结点的递归算法。 void Insert(BTreeNode*& BST, const ElemType& item) if(BST=NULL) BTreeNode* p=new BTreeNode; p-data=item; _; BST=p; else if(itemdata) _; else _; 3. 二分查找的递归算法。 Int Binsch(ElemType A,int low,int high,KeyType K) if (low=high) int mid=(low+high)/2; if (_) return mid; /查找成功,返回元素的下标 else if (K=n)。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为 (en-1, en-2, , e1, e0)。 void inverse ( ElemType A , int n )3. 试编写一个算法,在带表头结点的单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1