数据结构复习题答案.docx
- 文档编号:29608409
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:14
- 大小:52.54KB
数据结构复习题答案.docx
《数据结构复习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构复习题答案.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构复习题答案
选择题:
1、与顺序表相比,用链表表示线性表的优点是()。
A.便于随机存取B.便于元素的插入和删除操作
C.存储的密度较高D.元素的物理顺序与逻辑顺序一致
2、以下数据结构中,()是线性结构。
A.无向网B.队列C.二叉检索树D.有向无环
3、在长度为n的顺序表中,向第k个元素(1≤k≤n+1)之前插入一个新元素时,需向后移动()个元素。
A.n-kB.n-k+1C.n-k-1D.k
4、在长度为n的顺序表中,删除第k个元素(1≤k≤n+1)时,需向前移动()个元素。
A.n-kB.n-k+1C.n-k-1D.k
5、与顺序栈相比,链栈的主要优点在于()。
A.入栈操作更加方便B.出栈操作更加方便
C.通常不会出现栈满D.通常不会出现栈空
6、用大小为n的一维数组S存储一个栈,令S[0]为栈底,变量top表示当前栈顶的位置(下标),即S[top]为栈顶元素。
则,元素出栈后top应做如下()的修改。
A.top--;B.top++;
C.top=n-1;D.top=-1;
7、以链表作为栈的存储结构,令Sp为栈顶指针,栈空的判定条件是()。
A.Sp==NULLB.Sp>=-1
C.Sp!
=NULLD.Sp!
=-1
8、在一个单链表中,若要删除指针p所指向结点的后继结点,则需执行()中的语句。
A.p->next=p->next->next;
B.p=p->next;p->next=p->next->next;
C.p=p->next->next;
D.p->next=p;
9、设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6先后进入栈S,一个元素出栈后即进入队列Q,若6个元素的出队顺序是a2,a4,a3,a6,a5,a1,则栈S至少可以容纳()个元素。
A.3B.4C.5D.6
10、若进栈序列为a1、a2、a3、a4,进栈过程允许出栈,则下列出栈序列中,()是不可能的。
A.a1、a3、a4、a2B.a2、a4、a3、a1
C.a3、a4、a2、a1D.a1、a4、a2、a3
11、设有一个大小为m的数组表示循环队列,若f表示当前队头元素在数组中的前一位置,r表示队尾元素的所在位置,则计算队列中元素个数的表达式为()。
A.r-fB.(m-f-r)%m
C.(m+f-r)%mD.(m+r-f)%m
12、在大小为n的循环队列中,假定front指示队头的位置,rear指示队尾的后一位置,则判定队空的条件是()。
A.rear==n-1B.(front+1)%n==rear
C.front==rearD.front==(rear+1)%n
13、深度为7的二叉树至多有()个结点。
A.127B.255C.128D.256
14、n个结点的二叉树,其最小深度是()。
A.log2n+1B.log2nC.n/2D.n
15、设二叉树中任一结点的值大于其左子树中每个结点的值,而小于其右子树中每个结点的值,即它是一个二叉排序树。
则中序遍历该二叉树时,访问结点的序列是一个值()的序列。
A.递减B.递增
C.先递减后递增D.先递增后递减
16、以顺序存储方式将完全二叉树中的所有结点逐层存放于数组A中,结点A[i]若有左孩子,则结点()是其左孩子。
A.A[2*i]B.A[2*i+1]C.A[2*i+2]D.A[i/2]
17、由3个结点可以构成()棵形态不同的树,或构成()棵形态不同的二叉树。
A.2B.3C.4D.5
18、在下列存储形式中,()不适合于树。
A.双亲表示法B.孩子链表表示法
C.孩子兄弟表示法D.顺序存储表示法
19、某二叉树如图所示,对该二叉树进行中序遍历,结点的访问序列为()。
A.1,2,3,4,5,6,7
B.1,2,4,6,3,5,7
C.2,6,4,1,5,7,3
D.6,4,2,1,3,5,7
20、某二叉树如图所示,对该二叉树进行先序遍历的结点序列为()。
A.1,2,3,4,5,6,7
B.1,2,4,6,7,3,5
C.2,6,4,7,1,5,3
D.6,7,4,2,5,3,1
21、有n个顶点的无向完全图中,具有()条边。
A.n(n-1)/2B.n(n-1)C.n(n+1)/2D.n2
22、对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵中元素的个数为()。
A.nB.(n-1)2
C.(n+1)2D.n2
23、对图所示的无向图G,从顶点①开始,广度优先遍历,可能的顶点访问顺序为()。
A.①,②,③,④,⑤,⑥,⑦,⑧
B.①,②,⑥,③,④,⑦,⑧,⑤
C.①,②,⑥,③,④,⑤,⑦,⑧
D.①,②,③,⑤,④,⑥,⑦,⑧
24、对上一题的图G,从顶点①开始,深度优先遍历,则可能的顶点访问顺序为()。
A.①,②,③,④,⑤,⑥,⑦,⑧
B.①,②,⑥,③,④,⑦,⑧,⑤
C.①,②,⑥,③,④,⑤,⑦,⑧
D.①,②,③,⑤,④,⑥,⑦,⑧
25、有向图G有n个顶点,其邻接矩阵为A(二维数组),G中第k个顶点的度为()。
A.
B.
C.
D.
+
26、采用顺序检索的方法检索长度为n的顺序表,检索每个元素的平均比较次数(即平均检索长度)为()。
A.nB.n/2C.(n+1)/2D.(n-1)/2
27、设检索表(a1,a2,a3,...,a32)中有32条记录,且已按关键字递增有序排列,采用二分法检索一个与给定的键值K相等的记录,若a1.key A.3B.4C.5D.6 28、哈希检索的基本思想是依据关键字值的简单换算来决定()。 A.记录的存储地址B.记录的序号 C.平均检索长度D.哈希表空间 29、设有一个用线性探测法解决冲突得到的哈希表(哈希函数: H(key)=key%11): 012345678910 13 25 80 16 17 6 14 若要检索关键字值为14的记录,探测(比较)的次数是()。 A.1B.6C.7D.8 30、设计一个用线性探测法解决冲突的哈希表(哈希函数: H(key)=key%17),其地址区间为0..16,现将关键字值分别为26、25、72、38、8、18、59的记录依次存储到哈希表中。 关键字值为59的记录在哈希表中的地址(下标)是()。 A.8B.9C.10D.11 31、用直接插入排序法对下面4个序列进行递增(由小到大)排序,元素比较次数和移动次数最少的是()。 A.10,3,4,9,8,6,2,7B.2,3,6,4,8,7,9,10 C.3,4,2,6,7,10,9,8D.9,7,8,6,2,3,10,4 32、对10个记录的序列: 4,3,6,9,7,1,2,5,0,8进行排序,若采用快速排序,一趟分割之后序列的次序是()。 A.3,4,6,9,1,7,2,5,0,8B.0,3,2,1,4,7,9,5,6,8 C.3,4,6,1,7,2,5,0,8,9D.1,2,5,0,8,4,3,6,9,7 33、对10个记录的序列: 4,3,6,9,7,1,2,5,0,8用归并排序方法进行一趟归并后的结果为()。 A.3,4,6,9,1,7,2,5,0,8B.0,3,2,1,4,7,9,5,6,8 C.3,4,6,1,7,2,5,0,8,9D.1,2,5,0,8,4,3,6,9,7 34、以下排序算法中,时间复杂度最高的是()。 A.希尔排序B.归并排序C.冒泡排序D.堆排序 35、以下排序算法中,需要附加的内存空间最小的是()。 A.归并排序B.快速排序C.堆排序D.树形选择排序 36、以下排序算法中,时间复杂度最小的是()。 A.二分插入排序B.直接选择排序 C.冒泡排序D.归并排序 37、对n个元素进行快速排序,所需要的辅助存储空间为()。 A.O (1)B.O(n)C.O(log2n)D.O(n2) 是非题: 1、在顺序表中定位第i个元素所花费的时间与i成正比。 (×) 2、在单链表中访问第i个元素所花费的时间与i成正比。 (√) 3、链式存储结构的优点是存储密度大,且插入和删除运算的效率高。 (×) 4、栈和队列都是顺序存储的线性结构。 (×) 5、“后进先出”不符合栈的特性。 (×) 6、一个2维数组可以视为其数据元素是1维数组的线性表。 (√) 7、空表就是所有元素都为0的表。 (×) 8、顺序存储结构不仅适宜表示完全二叉树,也完全适宜表示一般的二叉树。 (×) 9、二叉树先序遍历序列的最后一个结点,必是其中序遍历序列中的最后一个结点。 (×) 10、不使用递归也能实现二叉树的遍历。 (√) 11、一个无向图的邻接表中表结点的个数与边的个数一致。 (×) 12、一个有向图的邻接表和逆邻接表中表结点的个数不一定相等。 (×) 13、邻接表只能用于有向图的存储。 (×) 14、邻接矩阵只能用于表示无向图的顶点关系。 (×) 15、n(n>3)个带权叶子结点可以构成多棵哈夫曼树(最优二叉树)。 (√) 16、无向连通网存在最小生成树问题,而有向图不存在最短路径问题。 (×) 17、运用二分检索时,检索表中的元素必需以关键字递增(由小到大)有序排列。 (×) 18、哈希表中若不存在地址冲突或同义词,则其成功检索的平均检索长度等于1。 (√) 19、二路归并排序的核心操作是将两个有序序列合并为一个有序序列。 (√) 20、顺序检索表中的记录关键字递减(由大到小)有序时,不宜运用折半检索。 (×) 21、通常,选择排序比插入排序的元素交换次数要少。 (√) 22、对n个元素的集合进行归并排序时,需要的辅助存储空间为O(log2n)。 (×) 填空题: 1、在一个单链表中,在指针p所指向的结点之后插入指针s所指向的结点时,应执行如下操作: s->next=p->next;p->next=s; 2、在一个单链表中,要删除指针p所指向结点的后继结点,应执行如下操作: p->next= p->next->next; 3、在一个链栈中,Top为指向栈顶的指针,p所指向的结点入栈时,应顺序执行如下操作语句: p->next=Top;Top=p; 4、栈中的最后一个元素称为栈顶。 队列的第一个元素称为队首。 5、栈作为函数局部数据空间的数据结构。 队列作为文件缓冲区的数据结构。 6、size个结点的循环队列中,front指示当前队头的位置(下标),rear指示当前队尾的后一位置。 那么,在元素出队前,要执行front=(front+1)%size;语句;在元素入队前,要执行rear=(rear+1)%size;语句。 7、64个结点的完全二叉树中,有32个分枝结点,有32个叶子结点。 8、有15个结点的二叉树的二叉链表中,共有30个指针,其中有14个指针用于指向左、右孩子,剩余的16个指针为空。 9、一棵深度为6的满二叉树中,叶子结点的个数为32,分支结点的个数为31。 10、在有9个顶点的有向完全图中,共有72条弧。 11、在有9个顶点的无向完全图中,共有36条边;而其生成树中,有8条边。 12、各种选择排序算法中,最优的时间复杂度为O(nlog2n);最糟的时间复杂度为O(n2)。 13、各种排序算法中,最优的空间复杂度为O (1);最坏的空间复杂度为O(n)。 14、含有n个顶点的有向图的邻接矩阵为A(Ai,j是其第i行、第j列元素),计算第i个顶点的出度公式为 ;计算其入度的公式为 。 15、哈希(散列)检索的平均检索长度可以趋近于1。 16、平衡二叉检索树是指其任一结点的左子树与右子树深度的差不大于1的二叉检索树。 17、在连通的无向图中,求解指定源点到指定终点的最短路径,可以采用广度优先搜索算法。 18、求解连通网最小生成树的Prim算法的时间复杂度为O(n2),而Kruscal算法适用于边稀疏(e<=nlog2n)的连通网。 应用题: 1、已知一棵二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDAHGF,试画出该二叉树。 2、试分别画出下面二叉树的二叉链表,并分别写出先序遍历和中序遍历该二叉树的结点访问序列。 3、如下无向图的顶点依次存储为a、b、c、d和e,试画出该图的邻接表。 4、如下有向图的顶点依次存储为A,B,C,D,E和F,试画出该图的邻接矩阵。 5、有向图的邻接矩阵如下所示,顶点的次序依次为A,B,C,D,E,试画出该图及其邻接表。 6、已知顺序表中存储的序列{3,2,5,0,8,4,9,6,7,1},将元素按其在表中的次序依次插入到一棵初始为空的二叉检索树中,画出插入完成后的二叉检索树,并计算该检索树在等概率情况下的成功检索的平均检索长度。 7、已知顺序表中存储的序列{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday},将元素按其在表中的次序依次插入到一棵初始为空的二叉检索树中,画出插入完成后的二叉检索树,并计算该检索树在等概率情况下的成功检索的平均检索长度。 8、已知某通讯电文中仅使用A、B、C、D、E等5个符号,且这些符号在电文中分别出现27、14、5、76、21次,试以这5个符号设计(画出)哈夫曼树,并写出其哈夫曼编码。 编程题: 1、线性表以单链表存储,指向头结点的指针为hp,试编写计算表长(元素结点个数)算法的函数。 假设,单链表的结点类型已定义为node,它含有存放元素的data域和指向后继结点的指针域next。 intlength(node*hp) {intn=0; nodep=hp->next; while(p! =NULL) {n++; p=p->next; } returnn; } 2、编写一个实现在单链表中查找返回给定元素的结点地址的函数。 node*locate(node*hp,elemtpa) {node*p=hp->next; while(p! =NULL&&p->data! =a)p=p->next; returnp; } 3、编写一个实现在单链表中查找返回给定元素前趋的结点地址的函数。 node*locate_pre(node*hp,elemtpa) {node*p=hp; while(p->next! =NULL&&p->next->data! =a)p=p->next; if(p->next! =NULL)returnp; returnNULL; } 4、编写一个实现在单链表中指针p所指结点之后插入新元素结点的函数。 intinsert(node*hp,node*p,elemtpa) {node*q=hp->next; while(q! =NULL&&q! =p)p=p->next; if(q==NULL)return0;//插入点不存在 q=newnode; q->data=a;q->next=p->next; p->next=q; return1; } 5、编写以二叉链表表示的二叉树中序遍历的算法函数。 voidtravel_mid(bt_node*bp) {if(bp! =NULL) {travel_mid(bp->lp); visit(bp);//访问结点 travel_mid(bp->rp); } 6、编写一个计算以二叉链表表示的二叉树中叶子结点个数的函数。 intleaf_number(node*bp) {if(bp==NULL)return0; if(bp->lp==NULL&&bp->rp==NULL)return1; returnleaf_number(bp->lp)+leaf_number(bp->rp); } 7、以顺序表存储记录。 编写一个实现直接选择排序的函数。 voidsort_direct_sele(listnode*L,intn) {inti,j,k; listnodetemp; for(i=0;i {k=i;//每趟的起始记录初始化为候选记录 for(j=i+1;j if(L[j].key if(k! =i) {temp=L[i];L[i]=L[k];L[k]=temp;}//起始记录与最小记录交换 } } 8、以顺序表存储记录。 编写一个实现直接插入排序的函数。 voidsort_direct_instert(listnode*L,intn) {inti,j; listnodetemp; for(i=1;i {temp=L[i];//暂存待插入记录 j=i-1; while((j>=0)&&(temp.key {L[j+1]=L[j]; j--; } L[j+1]=temp;//插入待插记录 } } 9、编写一个在实现二叉检索树静态检索(查找并返回给定键值记录的存储地址)的函数。 bts_node*search(bts_node*p,keytypeK) {while(p! =NULL) if(p->key==K)break;//检索成功 elseif(p->key>K)p=p->lp; elsep=p->rp; returnp; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习题 答案