数据结构习题集及答案.docx

上传人:知****量 文档编号:28146328 上传时间:2022-07-26 格式:DOCX 页数:16 大小:65.08KB
返回 下载 相关 举报
数据结构习题集及答案.docx_第1页
第1页 / 共16页
数据结构习题集及答案.docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《数据结构习题集及答案.docx》由会员分享,可在线阅读,更多相关《数据结构习题集及答案.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、题库一、 一、项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。1算法指的是( ) A计算机程序 B解决问题的计算方法 C排序算法 D解决问题的有限运算序列2线性表采用链式存储时,结点的存储地址( ) A必须是不连续的 B连续与否均可 C必须是连续的 D和头结点的存储地址相连续3将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( ) AO(1) BO(n) CO(m) DO(m+n)4由两个栈共享一个向量空间的好处是:( ) A减少存取时间,降低下溢发生的机率 B节省存储空间,降低上溢发

2、生的机率 C减少存取时间,降低上溢发生的机率 D节省存储空间,降低下溢发生的机率5设数组datam作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( ) Afront=front+1 Bfront=(front+1)%(m-1) Cfront=(front-1)%m Dfront=(front+1)%m6如下陈述中正确的是( ) A串是一种特殊的线性表 B串的长度必须大于零 C串中元素只能是字母 D空串就是空白串7若目标串的长度为n,模式串的长度为n/3,则执行模式匹配算法时,在最坏情况下的时间复杂度是( ) AO() BO(n) C

3、O(n2) DO(n3)8一个非空广义表的表头( ) A不可能是子表 B只能是子表 C只能是原子 D可以是子表或原子9假设以带行表的三元组表表示稀疏矩阵,则和下列行表02335 对应的稀疏矩阵是( ) 10在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的结点个数为( ) A4 B5 C6 D711在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( ) Ae B2e Cn2e Dn22e12假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是( ) AO(n) BO(e) CO(n+e) DO(n*e)13用某种排序方

4、法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下: 20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,21,25,27,35,47,68,84 则所采用的排序方法是( ) A选择排序 B希尔排序 C归并排序 D快速排序14适于对动态查找表进行高效率查找的组织结构是( )A有序表 B分块有序表 C三叉排序树 D线性链表15不定长文件是指( )A文件的长度不固定 B记录的长度不固定C字段的长度不固定 D关键字项的长度不固定第二部分 非选择题(共70分)二、填空题(本大题共10小

5、题,每小题2分,若有两个空格,每个空格1分,共20分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。16数据的逻辑结构是从逻辑关系上描述数据,它与数据的 无关,是独立于计算机的。17在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head= 。18栈顶的位置是随着 操作而变化的。19在串S=“structure”中,以t为首字符的子串有 个。20假设一个9阶的上三角矩阵A按列优先顺序压缩存储在一维数组B中,其中B0存储矩阵中第1个元素a1,1,则B31中存放的元素是 。21已知一棵完全二叉树中共有768结点,则该树中共有 个叶子结点

6、。 22已知一个图的广度优先生成树如右图所示,则与此相 应的广度优先遍历序列为 。 23在单链表上难以实现的排序方法有 和 。 24在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为 。 25多重表文件和倒排文件都归属于 文件。 三、解答题(本大题共4小题,每小题5分,共20分)26画出下列广义表的共享结构图形表示 P=(z),(x,y)),(x,y),x),(z))27请画出与下列二叉树对应的森林。 28已知一个无向图的顶点集为a, b, c, d, e ,其邻接矩阵如下所示ab cde (1)画出该图的图形; (2)根据邻接矩阵从顶点a出发

7、进行深度优先遍历和广度优先遍历,写出相应的遍历序列。29已知一个散列表如下图所示:3520334859 0 1 2 3 4 5 6 7 8 9 10 11 12 其散列函数为h(key)=key%13, 处理冲突的方法为双重散列法,探查序列为: hi=(h(key)+*h1(key)%m =0,1,,m1其中 h1(key)=key%11+1回答下列问题:(1)对表中关键字35,20,33和48进行查找时,所需进行的比较次数各为多少?(2)该散列表在等概率查找时查找成功的平均查找长度为多少?四、算法阅读题(本大题共4小题,每小题5分,共20分)30下列算法的功能是比较两个链串的大小,其返回值为

8、: comstr(s1,s2)= 请在空白处填入适当的内容。int comstr(LinkString s1,LinkString s2) /s1和s2为两个链串的头指针 while(s1&s2) if(s1datedate)return1; if(s1dates2date)return1; ; ; if( )return1; if( )return1; ; 31阅读下面的算法 LinkList mynote(LinkList L) /L是不带头结点的单链表的头指针 if(L&L-next) q=L;L=Lnext;p=L; S1: while(pnext) p=pnext; S2: pnex

9、t=q;qnext=NULL; return L; 请回答下列问题: (1)说明语句S1的功能; (2)说明语句组S2的功能; (3)设链表表示的线性表为(a1,a2, ,an),写出算法执行后的返回值所表示的线性表。32假设两个队列共享一个循环向量空间(参见右下图), 其类型Queue2定义如下: typedef struct DateType dataMaxSize; int front2,rear2; Queue2;对于i=0或1,fronti和reari分别为第i个队列的头指针和尾指针。请对以下算法填空,实现第i个队列的入队操作。 int EnQueue (Queue2*Q,int i

10、,DateType x) /若第 i个队列不满,则元素x入队列,并返回1;否则返回0 if(i1)return 0; if(Qreari=Qfront return0; Qdata =x; Qreari= ; return1; 33已知二叉树的存储结构为二叉链表,阅读下面算法。 typedef struct node DateType data; Struct node * next; ListNode; typedef ListNode * LinkList ; LinkList Leafhead=NULL; Void Inorder (BinTree T) LinkList s; If(T

11、) Inorder(Tlchild); If (!Tlchild)&(!Trchild) s=(ListNode*)malloc(sizeof(ListNode); sdata=Tdata; snext=Leafhead; Leafhead=s; Inorder(Trchild); 对于如下所示的二叉树 (1)画出执行上述算法后所建立的结构; (2)说明该算法的功能。五、算法设计题(本题共10分)34阅读下列函数arrange() int arrange(int a,int 1,int h,int x) /1和h分别为数据区的下界和上界 int i,j,t; i=1;j=h; while(ij

12、) while(i=x)j-; while(i=x)i+; if(ij) t=aj;aj=ai;ai=t; if(ainext s2=s2next s2(或s2!=NULL或s2&!s1) s1(或s1!=NULL或s1&!s2) return 031.(1)查询链表的尾结点 (2)将第一个结点链接到链表的尾部,作为新的尾结点 (3)返回的线性表为(a2,a3,an,a1)32. (i1)%2(或1i) Qreari (Qreari)%Maxsize33.(1)LeafheadFHGD (2)中序遍历二叉树,按遍历序列中叶子结点数据域的值构建一个以Leafhead为头指针的逆序单链表(或按二叉

13、树中叶子结点数据自右至左链接成一个链表)。五、算法设计题(本题共10分) 34(1)该函数的功能是:调整整数数组a中的元素并返回分界值i,使所有x的元素均落在a1.i上,使所有x的元素均落在ai1.h上。 (2)int f(int b,int n) 或 int f(int b,int n) int p,q; int p,q; p=arrange(b,0,n1,0); p=arrange(b,0,n1,1); q= arrange(b,p+1,n1,1); q= arrange(b,0,p,0); return qp; return pq; 一、选择题(30分)1设某数据结构的二元组形式表示为A

14、=(D,R),D=01,02,03,04,05,06,07,08,09,R=r,r=,则数据结构A是( )。(A) 线性结构(B) 树型结构(C) 物理结构(D) 图型结构2下面程序的时间复杂为( )for(i=1,s=0; i=n; i+) t=1;for(j=1;jnext;p-data=q-data;p-next=q-next;free(q);(B) q=p-next;q-data=p-data;p-next=q-next;free(q);(C) q=p-next;p-next=q-next;free(q);(D) q=p-next;p-data=q-data;free(q);4设有n个

15、待排序的记录关键字,则在堆排序中需要( )个辅助记录单元。(A) 1(B) n(C) nlog2n(D) n25设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。(A) 10,15,14,18,20,36,40,21(B) 10,15,14,18,20,40,36,21(C) 10,15,14,20,18,40,36,2l(D) 15,10,14,18,20,36,40,216设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为( )。(A) O(1)(B) O(log2n)(C)(D) O(n2)7设

16、无向图G中有n个顶点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为( D )。(A) n,e(B) e,n(C) 2n,e(D) n,2e8. 设某强连通图中有n个顶点,则该强连通图中至少有( C )条边。(A) n(n-1)(B) n+1(C) n(D) n(n+1)9设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列( )方法可以达到此目的。(A) 快速排序(B) 堆排序(C) 归并排序(D) 插入排序10.下列四种排序中( )的空间复杂度最大。(A) 插入排序(B) 冒泡排序(C) 堆排序(D) 归并排序二、填空殖(48分,其中最后两

17、小题各6分)1. 1. 数据的物理结构主要包括_和_两种情况。2. 2. 设一棵完全二叉树中有500个结点,则该二叉树的深度为_;若用二叉链表作为该完全二叉树的存储结构,则共有_个空指针域。3. 3. 设输入序列为1、2、3,则经过栈的作用后可以得到_种不同的输出序列。4. 4. 设有向图G用邻接矩阵Ann作为存储结构,则该邻接矩阵中第i行上所有元素之和等于顶点i的_,第i列上所有元素之和等于顶点i的_。5. 5. 设哈夫曼树中共有n个结点,则该哈夫曼树中有_个度数为1的结点。6. 6. 设有向图G中有n个顶点e条有向边,所有的顶点入度数之和为d,则e和d的关系为_。7. 7. _遍历二叉排序

18、树中的结点可以得到一个递增的关键字序列(填先序、中序或后序)。8. 8. 设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较_次就可以断定数据元素X是否在查找表中。9. 9. 不论是顺序存储结构的栈还是链式存储结构的栈,其入栈和出栈操作的时间复杂度均为_。10. 10. 设有n个结点的完全二叉树,如果按照从自上到下、从左到右从1开始顺序编号,则第i个结点的双亲结点编号为_,右孩子结点的编号为_。11. 11. 设一组初始记录关键字为(72,73,71,23,94,16,5),则以记录关键字72为基准的一趟快速排序结果为_。12. 12. 设有向图G中有向边的集合E=,

19、则该图的一种拓扑序列为_。13. 13. 下列算法实现在顺序散列表中查找值为x的关键字,请在下划线处填上正确的语句。struct recordint key; int others;int hashsqsearch(struct record hashtable ,int k)int i,j; j=i=k % p;while (hashtablej.key!=k&hashtablej.flag!=0)j=(_) %m; if (i=j) return(-1); if (_ ) return(j); else return(-1);14. 14. 下列算法实现在二叉排序树上查找关键值k,请在下划

20、线处填上正确的语句。typedef struct nodeint key; struct node *lchild; struct node *rchild;bitree;bitree *bstsearch(bitree *t, int k) if (t=0 ) return(0);else while (t!=0)if (t-key=k)_; else if (t-keyk) t=t-lchild; else_;三、算法设计题(22分)1 1 设计在单链表中删除值相同的多余结点的算法。2 2 设计一个求结点x在二叉树中的双亲结点算法。数据结构试卷(三)参考答案一、选择题1.B2.B3.A4.

21、A5.A6.B7.D8.C9.B10.D第3小题分析:首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B。第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为O(log2n)。二、填空题1. 1. 顺序存储结构、链式存储结构2. 2. 9,5013. 3. 54. 4. 出度,入度5. 5. 06. 6. e=d7. 7. 中序8. 8. 79. 9. O(1)10. 10. i/2,2i+111. 11. (5,16,71,23,72,94,7

22、3)12. 12. (1,4,3,2)13. 13. j+1,hashtablej.key=k14. 14. return(t),t=t-rchild第8小题分析:二分查找的过程可以用一棵二叉树来描述,该二叉树称为二叉判定树。在有序表上进行二分查找时的查找长度不超过二叉判定树的高度1+log2n。三、算法设计题1. 1. 设计在单链表中删除值相同的多余结点的算法。typedef int datatype;typedef struct node datatype data; struct node *next;lklist;void delredundant(lklist *&head) lkl

23、ist *p,*q,*s; for(p=head;p!=0;p=p-next) for(q=p-next,s=q;q!=0; ) if (q-data=p-data) s-next=q-next; free(q);q=s-next; else s=q,q=q-next; 2. 2. 设计一个求结点x在二叉树中的双亲结点算法。typedef struct node datatype data; struct node *lchild,*rchild; bitree;bitree *q20; int r=0,f=0,flag=0;void preorder(bitree *bt, char x)

24、if (bt!=0 & flag=0)if (bt-data=x) flag=1; return;else r=(r+1)% 20; qr=bt; preorder(bt-lchild,x); preorder(bt-rchild,x); void parent(bitree *bt,char x) int i; preorder(bt,x); for(i=f+1; ilchild-data=x | qi-rchild-data) break; if (flag=0) printf(not found xn); else if (idata); else printf(not parent);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁