数据结构总复习习题讨论和答案answer.docx
《数据结构总复习习题讨论和答案answer.docx》由会员分享,可在线阅读,更多相关《数据结构总复习习题讨论和答案answer.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构总复习习题讨论和答案answer
1.一棵二叉树的先序序列和中序序列分别如下,画出该二叉树并写出它的后序遍历的序列。
先序序列:
ABDEHCFIG中序序列:
DBHEAFICG
后序遍历为DHEBIFGCA
2.已知一棵二叉树的后序遍历为CDBGHFIEA,中序遍历为CBDAGFHEI。
画出此二叉树并写出其先序遍历序列。
3.设一个权集W={5,29,7,8,14,23,3,11},
(1)构造一棵哈夫曼树;
(2)计算其带权路径长度WPL。
WPL=271
4.有一电文中使用5个字符A,B,C,D,E,他们出现的频率依次为4,7,5,2,9,试画出对应的哈夫曼树(要求左子树根节点的权不大于右子树根节点的权),并为每个字符设计哈夫曼编码。
WPL=60
A:
001
B:
10
C:
01
D:
000
E:
11
5.已知图的邻接矩阵如下,V0,V1,V2,V3,V4,V5,V6,分别写出从V5出发的深度优先和广度优先的遍历序列。
深度:
5301624
广度:
5346012
6.求出下图的一棵最小生成树。
7.下列有向图中,顶点表示工程子项目,弧表示项目间的先后关系,例如,弧表示完成Ci后才能进行Cj。
如果需要逐个安排子项目,则应当怎样安排这些工程项目?
0152364
0152634
0156234
0512364
0512634
0516234
1052364
1052634
1056234
1502364
1502634
1506234
5012364
5012634
5016234
5102364
5102634
5106234
5601234
5601234
5610234
8.对于给定结点的数据集合
D={55,13,20,15,31,7,18}
(1)依次取出D中各数据,构成一棵二叉排序树BT。
(2)求等概率情况下的平均查找长度ASL。
(3)画出在二叉排序树BT中删除“13”后的树的结构。
ASL=(1+2+3*2+4*2+5)/7=22/7
(参考中序遍历)
9.设有哈希函数为:
H(key)=keyMOD11,哈希表的长度为11,解决冲突的方法为线性探测再散列法,关键字的输入序列为:
(18,34,58,26,75,67,48,93,81),试构造此哈希表,并求出在等概率情况下查找成功和不成功时的平均查找长度。
0
1
2
3
4
5
6
7
8
9
10
34
67
58
26
48
93
18
81
75
成功
1
2
1
1
2
2
1
5
1
不成功
1
10
9
8
7
6
5
4
3
2
1
ASL成功=(1+2+1+1+2+2+1+5+1)/9=16/9
ASL不成功=(1+10+9+8+7+6+5+4+3+2+1)/11=56/11
10.有一组关键值序列(38,19,65,97,49,41,95,1,73),采用冒泡排序方法由小到大进行排序,请写出每趟的结果
19,38,65,49,41,95,1,73,97
19,38,49,41,65,1,73,95,97
19,38,41,49,1,65,73,95,97
19,38,41,1,49,65,73,95,97
19,38,1,41,49,65,73,95,97
19,1,38,41,49,65,73,95,97
1,19,38,41,49,65,73,95,97
Or
1,38,19,65,97,48,41,95,73
1,19,38,41,65,97,48,73,95
1,19,38,41,48,65,97,73,95
1,19,38,41,48,65,73,97,95
1,19,38,41,48,65,73,95,97
11.设有序列38,27,54,86,65,2,16,38,写出用快速排序法对该序列进行升序排序的每一趟结果.
16,27,2,38,65,86,54,38
2,16,27,38,38,54,65,86
1、根据树的定义,具有3个结点的树有(A)种树型。
A.2B.3C.4D.5
2、假定一棵树的结点数为17,则它的最小深度为(B)。
A.17B.2C.5D.6
3、对于任何一颗二叉树,若叶子节点个数为n0,度为2的节点个数为n2,则n0=(C)。
A.n2-1B.n2C.n2+1D.2*n2
4、若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是(B)。
A、9B、11C、12D、不确定
5、已知完全二叉树有30个结点,则整个二叉树有(B)个度为1的结点。
A、0B、1C、2D、不确定
6、深度为6的满二叉树上有(D)个结点。
A、32B、64C、31D、63
7、假定一棵二叉树的结点数为18,则它的最小深度为(C)。
A、18B、9C、5D、3
8、一个具有8个叶子结点的二叉树,其度数为2的结点数是(D)。
A、2B、4C、6D、7
9、无向图G的6个顶点的度分别为2,3,2,3,3,1,则其边数为(C)。
A.5B.6C.7D.8
10、如果G是一个具有n个顶点的无向图,那么图G最多有(B)条边。
A、n(n+1)/2B、n(n-1)/2C、n-1D、n
11、如果G是一个具有n(n>1)个顶点的连通无向图,T是G的一棵生成树,那么T有(A)条边。
A.n-1B.nC.n+1D.n+2
12、具有4个顶点的完全图有(A)条边。
A、6B、12C、16D、20
13、进行广度优先遍历时,通常采用(B)来实现算法的。
A.栈B.队列C.树D.图
14、进行深度优先遍历时,通常采用(A)来实现算法的。
A.栈B.队列C.树D.图
15、对有14个元素的有序表A[1..14]做二分查找,查找元素A[4]使得被比较元素依次为(C)。
A.A[1],A[2],A[3],A[4]B.A[1],A[14],A[7],A[4]
C.A[7],A[3],A[5],A[4]D.A[7],A[5],A[3],A[4]
16、顺序查找法适合于存储结构为(B)的线性表。
A、散列存储B、顺序存储或链接存储
C、压缩存储D、索引存储
17、设有一个长度为100的已排好序的表,用二分查找进行查找,若查找不成功,至少比较(D)次。
A、9B、8C、7D、6
18、设哈希表长m=14,哈希函数H(key)=key%11。
表中已有4个结点:
addr(15)=4
addr(38)=5
addr(61)=6
addr(84)=7
其余地址为空。
如用二次探测再散列处理冲突,关键字为49的结点的地址是(D)。
A.8B.3C.5D.9
19、一棵二叉排序树T,用(B)方法进行遍历,可以得到各结点关键值的递增序列。
A、先序遍历B、中序遍历C、层次遍历D、后序遍历
20、下列算法中,(C)排序在每趟结束后不一定能选出一个元素放到其排好序的最终位置上。
A.选择B.冒泡C.归并D.堆
21、下列算法中,第一趟排序完毕后,其最大或最小元一定在其最终位置上的算法是(B)。
A、归并排序B、直接选择排序C、快速排序D、直接插入排序
22、在待排序的元素序列基本有序的前提下,效率最高的排序方法是:
(A)。
i.A.直接插入B.冒泡排序C.希尔排序D.选择排序
23、下列排序方法中,排序所花费时间不受数据初始排列特性影响的算法是(C)。
A、直接插入排序B、冒泡排序C、直接选择排序D、快速排序
24、下列排序方法中,哪一种方法的比较次数与记录的初始排列状态无关?
(D)。
A.直接插入排序B.起泡排序C.快速排序D.直接选择排序
25、设有关键码初始序列{Q,H,C,Y,P,A,M,S,R,D,F,X},新序列{F,H,C,D,P,A,M,Q,R,S,Y,X}是采用下列哪种排序方法对初始序列进行第一趟扫描的结果?
(C)
A.直接插入排序B.二路归并排序
C.以第一元素为分界元素的快速排序D.冒泡排序
26、若关键值初始序列为{21,15,18,48,15,15,5},使用4种排序方法后分别得到下列4种序列,其中得到(B)所用的算法时稳定的。
A、{5,15,15,15,18,21,48}
B、{5,15,15,15,18,21,48}
C、{5,15,15,15,18,21,48}
D、{5,15,15,15,18,21,48}
1、已知一棵完全二叉树中共有75个结点,则该树中共38个叶子结点。
2、设树的度为4,其中度为1,2,3,4的结点数分别为4,2,1,1,则数中叶子结点个数为8。
3、一棵有n个叶子结点的赫夫曼树共有2n-1个结点。
4、通常图的存储采用邻接矩阵和邻接表,设有一稀疏图G,则G采用邻接表存储比较节省空间。
5、一个n个顶点的有向完全图,有n(n-1)条边。
6、一个n个顶点的无向完全图,有n(n-1)/2条边。
7、对于无向图,顶点Vi的度是邻接矩阵中的第i行(列)的元素之和。
8、已知图的邻接矩阵如下表,写出以顶点V1为出发点的深度优先遍历序列为V1V2V3V6V5V4,拓扑有序序列为V1V2V4V6V5V3。
V1
V2
V3
V4
V5
V6
V1
0
1
1
1
0
0
V2
0
0
1
1
1
0
V3
0
0
0
0
0
1
V4
0
0
0
0
0
1
V5
0
0
1
0
0
0
V6
0
0
0
0
1
0
9、在一个无环有向图G中,若存在一条从顶点i到顶点j的弧,则在顶点的拓扑序列中,顶点i与顶点j的先后次序是______i先于j______。
10、有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分法查找值为82的结点时,4次比较后查找成功。
11、一棵二叉排序树中若存在30个结点其成功的查找长度<6,则有___8__个结点其成功的查找长度=4。
12、在各种查找方法中,平均查找长度与结点个数无关的查找方法是哈希表查找法。
13、对顺序表的查找常用方法为顺序查找和折半查找(二分查找)。
14、若待排序的n个关键值均为实数,现需将所有负数派在非负数之前,可以用快速排序算法一遍处理后得到结果。
1、L是带表头结点的单链表,L中各结点的数据值依次为a,n,i,h,C。
问执行下列Fun函数后,下列单链表L的结果是怎样?
typedefstructLnode
{
chardata;
structLnode*next;
}LinkList;
voidFun(LinkList*&L)
{
LinkList*p,*q;
p=L->next;
L->next=NULL;
while(p!
=NULL)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
将表L进行逆序。
China
2、对于由下列数据2,3,5,5,5,7,8,9,9,9,10,11,11构成的单链表L,执行下列程序后的结果。
voidsample(LinkList*&L)
{p=L->next;
while(p->next)
{if(p->next->data==p->data)
{q=p->next;
p->next=q->next;
free(q);
}
p=p->next;
}
}
//删除重复值的结点
2,3,5,7,8,9,10,11
3、对于双向链表类型DLinkList类型的定义如下:
typedefstructDNode/*定义双链表结点类型*/
{ElemTypedata;
structDNode*prior;/*指向前驱结点*/
structDNode*next;/*指向后继结点*/
}DLinkList;
要求删除P指针指向的结点,写出简单的语句序列
p->next->prior=p->prior
p->prior->next=p->next
deletep;(或者freep)
4、初始化队列,构造一个空队列q。
队列的结构体定义如下:
#defineMaxSize100
typedefcharElemType;
typedefstruct
{
ElemTypedata[MaxSize];
intfront,rear;//队首和队尾下标
}SqQueue;
voidInitQueue(SqQueue*&q)
{
6—
(1)q=newSqQueue;
6—
(2)q->front=q->rear=0;
}
intenQueue(SqQueue*&q,ElemTypee)
{
if((q->rear+1)%MaxSize==q->front)//队满
return0;
6—(3)q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return1;
}
intdeQueue(SqQueue*&q,ElemType&e)
{
if(q->front==q->rear)//队空
return0;
6—(4)q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return1;
}
5、求下列表达式的的后缀表达式。
(A+B/C-D)*(E*(F+G))
后缀表达式:
ABC/+D-EFG+**
6、线性表可用顺序表和单链表作为存储结构。
试问:
1)两种存储表示各有哪些主要优缺点?
2)如果有n个表同时并存,且处理过程中各表的长度会动态发生变化,表的总数也可能自动改变,在此情况下应选用哪种存储表示?
为什么?
3)若表的总数基本稳定,且很少进行插入和删除,但要求以最快速度存取表中元素,这时应采用哪种存储表示?
为什么?
(1)两种存储结构的特点如下:
顺序表
链表
存储密度
1
<1
存储空间
开辟足够大
根据需要开辟
存取
O
(1)
O(n)
插入、删除
O(n)
O
(1)
(2)选择单链表,因为各表的长度会动态发生变化,采用链式存储根据需要开辟结点,节约空间。
(3)选择顺序表,顺序表最大的优点是存取表中元素的速度快。
1、算法分析的两个主要方面是(A)。
A.空间复杂性和时间复杂性B.正确性和简明性
C.可读性和文档性D.数据复杂性和程序复杂性
2、分析以下程序段的时间复杂度(A)。
s=0;
for(i=0;i<=n;i++)
for(j=0;j<=i;j++)
s++;
A.n2B.nC.n×iD.(i×j)
3、线性表采用链式存储时,其地址是(D)。
A、必须是连续的B、部分地址必须是连续的
C、一定是不连续的D、连续与否均可以
4、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用下列(D)存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双向链表D.仅有尾指针的单循环链表
5、一个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是(D)。
A.12345B.54321C.23451D.41235
6、在一个单链表中,已知p结点是q结点的后继结点,若在q和p之间插入s结点,则执行(C)。
A.s->next=p->next;p->next=s;B.p->next=s->next;s->next=p;
C.q->next=s;s->next=p;D.p->next=s;s->next=q;
7、设单链表中指针P指向结点A,若要删除A之后的结点(若存在),则需修改指针(A)。
A、P->link=(P->link)->linkB、P=P->link
C、P=(P->link)->linkD、P->link=P
8、在解决计算机主机与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,打印机则从该缓冲区中取出数据打印。
该缓冲区应该是一个(B)结构。
A.堆栈B.队列C.数组D.线性表
9、若指针h指向栈顶结点,则向链栈插入一个指针p所指的结点的语句为(A)。
A.p->next=h;h=p;B.p->next=h->next;h->next=p;
C.h->next=p;D.p->next=h;h=h->next;
10、设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为(C)。
A.O
(1)B.O(log2n)C.O(n)D.O(n2)
11、在具有SIZE个单元的顺序存储的循环队列中,假定front和rear分别指向队列的第一个元素和最后一个元素的下一个位置,则判断队列满的条件是(C)。
A.rear%SIZE==frontB.front%SIZE==rear
C.(rear+1)%SIZE==frontD.rear%SIZE+1==front
1、一个算法具有下列五个重要特性:
确定性、可行性、输入、输出、有穷性五条性质。
2、一个好的算法应考虑达到以下四个目标:
正确性、可读性、健壮性和效率与低存储量需求。
3、在算法是正确的前提下,评价一个算法的两个标准是时间复杂度和空间复杂度
4、线性结构中的元素之间存在一对一的关系,树形结构中的元素之间存在一对多的关系,图形结构中的元素之间存在多对多的关系。
5、存储结构有顺序存储、链式存储、索引存储和散列存储四种。
6、在线性结构中,起始结点没有前驱结点,其余每个结点有且只有1个前驱结点,终端结点没有后续结点,其余结点有且只有1个后续结点。
7、对于一个头指针为head的带头结点的单链表,判定该为空表的条件是head->next==NULL。
8、
设单链表的结点结构为datanext,且r始终指向单链表的最后一个结点,要在最后一个结点之后插入由s所指向的结点,需要执行的3条语句是:
r->next=s;r=s;s->next=NULL;
9、
在非空双向链表的结点结构为priordatanext,指针p指向此链表中的某个结点,若要指针p向前移动2个结点,即指向p结点的前驱的前驱(假定该结点存在),则需要执行的语句是:
p=p->prior->prior;
10、在带有头结点的单循环链表仅有尾指针R,则表为空的条件是R->next==R
11、设SQ[0..maxsize-1]为一个顺序存储的栈,变量top指示栈顶元素的位置,当栈未满时,将元素x进栈需执行下列语句:
top++;和SQ[top]=x;。
12、在队列中存取数据应遵循的原则是先进先出,在栈中存取数据应遵循的原则是后进先出。
1、输出二叉树中所有度为2的结点。
typedefstructnode//二叉树的二叉链表存储定义
{chardata;
structnode*lchild,*rchild;
}BTNode;
voidshow(BTNode*T)
{//填入实现代码
}
2、输出一个二叉树中所有的叶子结点。
typedefstructnode//二叉树的二叉链表存储定义
{chardata;
structnode*lchild,*rchild;
}BTNode;
voidshow(BTNode*T)
{//填入实现代码
}
3、计算一个二叉树中所有的叶子结点综述。
typedefstructnode//二叉树的二叉链表存储定义
{chardata;
structnode*lchild,*rchild;
}BTNode;
voidcount(BTNode*T)
{//填入实现代码
}
4、按先序次序打印出二叉树t的前k个结点的值
typedefstructbnode
{chardata;
structbnode*lchild,rchild;
}bnode,*bitre;
voidpreorder(bitret;intk)
{//填入实现代码
}
5、假设二叉树采用链接方法存储,现将一棵给定的二叉树b复制成t。
typedefstructbtnode
{datatypedata;
structbtnode*left,right;
}btnode,*bitree;
bitreecopy(bitreeb)
{//填入实现代码
}
6、向顺序存储的有序表L中插入一个新元素x,使表中数据仍按升序排列。
typedefstructsqlisttp
{Elemtpelem[maxlen];
intlast;
}sqlisttp;