数据结构习题概率表示某个事件发生的可能性。概率密度只能表示概率的分布,因为任何连续型分布取某一个点得概率都为零。
( )1、顺序存储方式只能用于线性结构,不能用于非线性结构。
( )2、若一个结点是某二叉树子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
( )3、求最小生成树的Prim算法在边较少、结点较多时效率较高。
( )4、折半查找只能在有序的顺序表上进行而不能在有序链表上进行。
( )5、快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。
( )6、在一个有向图的邻接表中,若某结点的链...
概率表示某个事件发生的可能性。概率密度只能表示概率的分布,因为任何连续型分布取某一个点得概率都为零。
( )1、顺序存储方式只能用于线性结构,不能用于非线性结构。
( )2、若一个结点是某二叉树子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
( )3、求最小生成树的Prim算法在边较少、结点较多时效率较高。
( )4、折半查找只能在有序的顺序表上进行而不能在有序链表上进行。
( )5、快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。
( )6、在一个有向图的邻接表中,若某结点的链表为空,则该顶点的度一定为零。
( )7、在二叉排序树中删除一个结点,接着又将该结点插入到该二叉排序树中去,该二叉
树不会发生变化。
( )8、插入排序、选择排序和冒泡排序不都是稳定的排序算法。
( )9、在二叉排序树上删除一个结点时,不必移动其它结点,只要将该结点相应的指针域
置空即可。
( )10、由二叉树的后序序列和中序序列可以唯一地确定一棵二叉树。
错
错
错
错
错
错
错
对
错
对
( )1、在前序遍历二叉树的序列中,任何结点的子树中的所有结点不一定在该结点之后。
( )2、图的最小生成树的形状可能不唯一。
( )3、在n个结点的无向图中,若边数大于n-1,则该图必是连通图。
( )4、对于给定的关键字集合,以不同的次序插入到初始为空的二叉排序树中,得到的二
叉排序树是相同的。
( )5、对有n个
的集合进行冒泡排序,所需时间决定于初始记录的排列情况;在初始
记录无序的情况下最好。
( )6、将树转换成二叉树,其根结点的右子树必是空的。
( )7、插入、删除是数据结构中基本的操作,所以这两种操作在数组中也常用。
( )8、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序不发生改变。
( )9、在哈夫曼编码中,出现频率相同的字符编码长度也一定相同。
( )10、采用线性探测法处理冲突时,当从哈希表中删除一个记录时,不应将这个记录的所在位置置为空,因为这将会影响以后的查找。
错
对
对
错
错
对
错
对
错
错
1、
2、初始:
Weight
Lchild
Rchild
Parent
3
0
0
0
12
0
0
0
7
0
0
0
4
0
0
0
2
0
0
0
8
0
0
0
11
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
终态:
Weight
Lchild
Rchild
Parent
3
0
0
8
12
0
0
12
7
0
0
10
4
0
0
9
2
0
0
8
8
0
0
10
11
0
0
11
5
1
5
9
9
8
4
11
15
6
3
12
20
7
9
13
27
10
2
13
47
12
11
0
3、邻接矩阵:
0
12
0
0
2
0
0
0
12
0
0
0
0
3
0
5
0
0
0
8
2
4
0
0
0
0
8
0
10
0
8
0
2
0
2
10
0
0
0
0
0
3
4
0
0
0
7
0
0
0
0
8
0
7
0
0
0
5
0
0
0
0
0
0
2 12
5 2 ^
邻接表:
V1
V2
8 5 ^
6 3
1 12
V3
6 4 ^
5 2
4 8
V4
7 8 ^
5 10
3 8
V5
4 10 ^
3 2
1 2
V6
7 7 ^
3 4
2 3
V7
6 7 ^
4 8
V8
2 5 ^
深度:12634578 广度:12568347
4、
12345678 12345768 12345786 12354678 12354768 12354786
13245678 13245768 13245786 13254678 13254768 13254786
13456278 13452678 13452786 13452768
13425678 13425768 13425786
13427856 13427568 13427586
还有就是以31开头的情况。
5 ^
4
5、
0
1
9 ^
3
6
2
3
8 ^
4
5
6
2 ^
7
7
8
9
6、
1-2为a1;1-3为a2;3-2为a3;2-4为a4;3-4为a5;3-5为a6;4-5为a7;4-6为a8;5-6为a9。
Ve[1]=0
Ve[2]=max{a1,a2+a3}=3+3=6
Ve[3]=3
Ve[4]=max{6+a4,3+a5}=3+9=12
Ve[5]=12+6=18
Ve[6]=18+3=21
Vl[6]=ve[6]=21
Vl[5]=21-3=18
Vl[4]=18-6=12
Vl[3]=12-9=3
Vl[2]=12-5=7
Vl[1]=3-3=0
E[1]=ve[1]=0 l[1]=vl[2]-a1=7-2=5
E[2]=0 l[2]=vl[3]-a2=3-3=0
E[3]=ve[3]=3 l[3]=vl[2]-a3=7-3=4
E[4]=ve[2]=6 l[4]=vl[4]-a4=12-5=7
E[5]=ve[3]=3 l[5]=vl[4]-a5=12-9=3
E[6]=3 l[6]=vl[5]-a6=18-4=14
E[7]=ve[4]=12 l[7]=vl[5]-a7=18-6=12
E[8]=12 l[8]=21-2=19
E[9]=ve[5]=18 l[9]=vl[6]-a9=21-3=18
关键路径:a2 a5 a7 a9,即v1 v3 v4 v5 v6
7、
初始:
调整成堆:从20开始筛选
交换堆顶和堆底进行排序(略)
8、
Void move(linklist list)
{ p=s=list;
q=list->next;
while(q!=null)
{if(p->data>q->data)
{p=q;
t=s;
}
s=q;q=q->next;
}
if(p!=list)
{t->next=p->next;
p->next=list;
list=p;
}
}
第6章
一棵有124个叶子结点的完全二叉树,最多有几个结点?
答案:n=n1+2n0-1
248
已知某字符串S中共有8种,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串用(0,1)进行前缀编码,问该字符串的编码至少有多少位?
答案: 1 2
3 3
6 5 4 4
11 9 7 8
15
35
1×5+2×5+3×4+5×3+4×3+4×3+9×2+7×2=98位
1、树中结点数目:
递归:
int num ( Bitree t)
{ if (t= = NULL) return 0;
else
return num(t->lchild)+num(t->rchild)+1;
}
非递归:
int num(Bitree t)
{ if (t= = NULL) return 0;
p=t;
top=count=0;
while(p!=null||top>0)
{ while(p!=null)
{if(top=Maxsize-1)
{ cout<<’栈满!’<
lchild;
count++;
}
p=stack[top];
top--;
p=p->rchild;
}
return count;
}
2、二叉树深度:
递归:
int high(BiTree t)
{ if(t= =NULL) return(0);
hl=high(t->lchild);
hr=high(t->rchild);
return(max(hl,hr)+1);
}
非递归:
int high(BiTree t)
{ if(t=null) return(0);
maxhigh=0;
curhigh=0;
top=0;
p=t;
while(p!=null||top>0)
{ while(p!=null)
{if(top=Maxsize-1)
{ cout<<’栈满!’<lchild;
curhigh++;
}
p=stack1[top];
curhigh=stack2[top];
top--;
if(p->lchild=null &&p->rchild=null)
if(curhigh>maxhigh)
maxhigh=curhigh;
p=p->rchild;
curhigh++;
}
return(maxhigh+1);
}
3、左右子树交换:
递归:
void process (BiTree t )
{ if (t= =NULL) return;
process (t->lchild);
process (t->rchild);
t->lchild<=>t->rchild;
return;
}
非递归:
void change(BiTree t)
{ if(t=null) return ;
int rear=0,front=-1;
queue[rear]=t;
while(front!=rear)
{ front++;
p=queue[front];
if(p->lchild!=null)
{rear++;
queue[rear]=p->lchild;
}
if(p->rchild!=null)
{rear++;
queue[rear]=p->rchild;
}
temp=p->lchild;
p->lchild= p->rchild;
p->rchild= temp;
}
}
4、顺序存储完全二叉树的先序非递归遍历:
void Preorder(SqBiTree bt)
{ i=1;
top=0;
while( i<=n || top!= 0)
{ while(i<=n)
{call visit(bt[i]);
top = top + 1;
stack[top]=i;
i=2×i;
}
i=stack[top];
top = top - 1;
i=i×2+1;
}
}
第三章
1、写出和下列递归过程等价的非递归过程:
void test(int sum)
{int a;
read(a);
if(a=0) sum=1;
else{
test(sum);
sum=sum*a;
}
write(sum);
}
解:
void test()
{int s=1,sum[];
int top=0;
read(a);
while(a!=0)
{sum[top]=a;
top++;
read(a);
}
sum[top]=1;
while(top>=0)
{s=s*sum[top];
top- -;
write(s);
}
}
2、利用栈将一个非空链表进行逆置。
解:(链表结构体定义省略且视其带头结点)
void inversion(linklist l)
{lnode *stack[],*p;
int top=0;
p=l->next;
while(p)
{stack[top]=p;
top++;
p=p->next;
}
p=l;
while(top>=0)
{p->next=stack[top];
top- -;
p=p->next;
}
p->next=NULL;
}
第四章
1、模式串t=”abcaabbcabcaabdab”
求next和nextval。
解: a b c a a b b c a b c a a b d a b
next:0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2
nextval:0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1
2、主串s=”abcaabbcaaabababaabca”,模式为t=”baba”,求:next和nextval:用KMP算法对目标s进行匹配。
解: b a b a
next:0 1 1 2
nextval:0 1 0 1
abcaabbcaaabababaabca
b
ba
b
b
b
ba
ba
b
b
b
b
baba
1、树的举例:
画出和下列已知序列对应的树T:
先根次序:GFKDAIEBCHJ
后根次序:DIAEKFCJHBG
2、哈夫曼树举例:
已知下列字符A、B、C、D、E、F、G的权值为3、12、7、4、2、8、11,试填写出其对应的哈夫曼树的存储结构的初态和终态。
3、最小生成树PRIM:
画出下图的邻接矩阵和邻接表,根据邻接表写出深度和广度优先遍历序列,并画出用PRIM算法得到最小生成树的过程。
4、拓扑排序举例:
写出下图的所有可能的拓扑序列。
5、哈希表冲突举例:
若的地址范围是[0,9],哈希数为H(KEY)=(key+2)MOD9,采用拉链法处理冲突,画出元素7、4、5、3、6、2、8、9依次插入哈希表以后的状态。
6、关键路径举例:
下图是一个AOE网,找出关键路径(过程)。
7、堆排序的举例:
将下列序列调整成大顶堆,并完成排序过程:
85,100,90,85,60, 20,25,10,70,75,65,50,80。
8、已知非空单链表list,写一算法找出链表中的数据域值最小的那个结点,并将其链接到表的最前面。
9、对{32,40,58,44,85,76,72,23,38,93}这一整数集生成一棵平衡二叉树。
第6章
一棵有124个叶子结点的完全二叉树,最多有几个结点?
答案:n=n1+2n0-1
248
已知某字符串S中共有8种,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串用(0,1)进行前缀编码,问该字符串的编码至少有多少位?
答案: 1 2
3 3
6 5 4 4
11 9 7 8
15
35
1×5+2×5+3×4+5×3+4×3+4×3+9×2+7×2=98位
1、树中结点数目:
递归:
int num ( Bitree t)
{ if (t= = NULL) return 0;
else
return num(t->lchild)+num(t->rchild)+1;
}
非递归:
int num(Bitree t)
{ if (t= = NULL) return 0;
p=t;
top=count=0;
while(p!=null||top>0)
{ while(p!=null)
{if(top=Maxsize-1)
{ cout<<’栈满!’<lchild;
count++;
}
p=stack[top];
top--;
p=p->rchild;
}
return count;
}
2、二叉树深度:
递归:
int high(BiTree t)
{ if(t= =NULL) return(0);
hl=high(t->lchild);
hr=high(t->rchild);
return(max(hl,hr)+1);
}
非递归:
int high(BiTree t)
{ if(t=null) return(0);
maxhigh=0;
curhigh=0;
top=0;
p=t;
while(p!=null||top>0)
{ while(p!=null)
{if(top=Maxsize-1)
{ cout<<’栈满!’<lchild;
curhigh++;
}
p=stack1[top];
curhigh=stack2[top];
top--;
if(p->lchild=null &&p->rchild=null)
if(curhigh>maxhigh)
maxhigh=curhigh;
p=p->rchild;
curhigh++;
}
return(maxhigh+1);
}
3、左右子树交换:
递归:
void process (BiTree t )
{ if (t= =NULL) return;
process (t->lchild);
process (t->rchild);
t->lchild<=>t->rchild;
return;
}
非递归:
void change(BiTree t)
{ if(t=null) return ;
int rear=0,front=-1;
queue[rear]=t;
while(front!=rear)
{ front++;
p=queue[front];
if(p->lchild!=null)
{rear++;
queue[rear]=p->lchild;
}
if(p->rchild!=null)
{rear++;
queue[rear]=p->rchild;
}
temp=p->lchild;
p->lchild= p->rchild;
p->rchild= temp;
}
}
4、顺序存储完全二叉树的先序非递归遍历:
void Preorder(SqBiTree bt)
{ i=1;
top=0;
while( i<=n || top!= 0)
{ while(i<=n)
{call visit(bt[i]);
top = top + 1;
stack[top]=i;
i=2×i;
}
i=stack[top];
top = top - 1;
i=i×2+1;
}
}
河 北 大 学 课 程 考 核 试 卷
2009—2010 学年第 1 学期 2008 级 生物信息 专业(类)
考核科目 数据结构 课程类别 必修 考核类型 考试 考核方式 闭卷 卷别 B
(注:考生务必将答案写在答题纸上,写在本试卷上的无效)
一、选择题:(共20分,每小题2分)
1、在非空双向循环链表中,在由q所指的链结点后面插入一个由p所指的链结点的过程是依次执行:p->prior=q;p->next=q->next;q->next=p;( )。
A.q->prior=p B.q->next->prior=p
C.p->next->prior=p D.p->prior->prior=p
2、数据的四种基本存储结构是指( )。
A.顺序存储结构、索引存储结构、直接存储结构、倒排存储结构
B.顺序存储结构、链式存储结构、树型存储结构、图型存储结构
C.顺序存储结构、非顺序存储结构、指针存储结构、树型存储结构
D.顺序存储结构、索引存储结构、链式存储结构、散列存储结构
3、设有一顺序栈,元素s1、s2、s3、s4、s5、s6依次进栈,如果6个元素出栈的顺序是s2、s4、s3、s6、s5、s1,则栈的容量至少应该是( )。
A.2 B.3 C.5 D.6
4、假设S=“I□AM□A□STUDENT”,则运算substr(S,4,8)的结果为( )。
A.“M□A□S” B.“M□A□STUD”
C.“A□STUDEN” D.“STUD”
5、在下列各棵二叉树中,二叉排序树是( )。
B—4—1
6、若一棵二叉树有10个度为2的结点,则该二叉树的叶结点的个数为( )。
A.9 B.11 C.12 D.不确定
7、线索二叉树中某结点*P没有左孩子的充要条件是( )。
A.P->lchild=null B.P->rchild=null C.P->ltag=0 D.P->ltag=1
8、当待排序序列中记录数较少或基本有序时,最适合的排序方法为( )。
A.直接插入排序法 B.快速排序法
C.堆排序法 D.归并排序法
9、若对序列(15,30,26,22,69,50,53,87)采用二路归并法排序,则进行一趟归并后产生的序列为( )。
A.15,30,22,26,50,69,53,87 B.15,22,26,30,50,53,69,87
C.15,26,30,22,50,69,53,87 D.15,26,22,30,50,53,69,87
10、已知一有向图的邻接表存储结构如右图所示,则根据有向图的广度优先遍历算法,从顶点v1出发,所得到的顶点序列是( )。
A.v1,v2,v3,v5,v4 B.v1,v3,v2,v4,v5
C.v1,v3,v4,v5,v2 D.v1,v4,v3,v5,v2
二、填空题:(共20分,每个空2分)
1、通常从四个方面评价算法的质量:正确性、_________、_________和高效性。
空串的长度等于 。
3、顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的_____ ____个元素。
4、非空单循环链表L中的*p是尾结点的条件是___ ___ ___。
5、二维数组A[11][20]采用按行为主序的存储方式,每个元素占4个存储单元,若A[0][0]的存储地址为300,则A[10][10]的地址为 。
6、右图中树的度为 。
B—4—2
7、在分块查找方法中,首先在 中查找,然后再查找相应的块。
8、对一组关键码(46,79,54,38,40,84)以第一个记录为支点记录,利用快速排序方法进行排序后得到的第一次划分的结果为______________。
三、:(共40分)
1、画出如下图所示的森林经转换后所对应的二叉树,并写出其二叉树的先序遍历序列和中序遍历序列。(9分)
2、已知某字符串S中共有8种,各种字符分别出现2次、1次、4次、5次、8次、6次、10次和9次,对该字符串用(0,1)进行前缀编码,问该字符串的编码至少有多少位?(9分)
3、试写出下图的邻接矩阵存储并列出可能的拓扑排序序列(至少写出4个正确的序列)。(7分)
4、已知长度为8的查找表:{10, 13, 19, 7, 4, 8, 15, 20},试按表中元素的顺序依次插入到一棵初始为空的平衡二叉树中。画出插入完成后的平衡二叉树,并求其在等概率的情况下查找成功的平均查找长度。(8分)
5、对给定序列 60,42,30,72,85,78,41,90,66完成下列要求:建立一棵3阶B-树;删除72后调整。(7分)
B—4—3
四、算法设计:(共20分)
要求:⑴自己定义有关的存储类型;
算法中的主要操作步骤要加以注释。
1、已知非空线性链表第一个链结点的指针为list,请写一算法,将链表中的数据域最大的那个结点移到链表的最后面。(10分)
2、二叉树采用链接存储结构,设计一个算法交换二叉树中每个结点的左右孩子结点。(10分)
1、树的举例:
画出和下列已知序列对应的树T:
先根次序:GFKDAIEBCHJ
后根次序:DIAEKFCJHBG
2、哈夫曼树举例:
已知下列字符A、B、C、D、E、F、G的权值为3、12、7、4、2、8、11,试填写出其对应的哈夫曼树的存储结构的初态和终态。
3、最小生成树PRIM:
画出下图的邻接矩阵和邻接表,根据邻接表写出深度和广度优先遍历序列,并画出用PRIM算法得到最小生成树的过程。
4、拓扑排序举例:
写出下图的所有可能的拓扑序列。
5、哈希表冲突举例:
若的地址范围是[0,9],哈希函数为H(KEY)=(key+2)MOD9,采用拉链法处理冲突,画出元素7、4、5、3、6、2、8、9依次插入哈希表以后的状态。
6、关键路径举例:
下图是一个AOE网,找出关键路径(要求过程)。
7、堆排序的举例:
将下列序列调整成大顶堆,并完成排序过程:
85,100,90,85,60, 20,25,10,70,75,65,50,80。
8、已知非空单链表list,写一算法找出链表中的数据域值最小的那个结点,并将其链接到表的最前面。
9、对{32,40,58,44,85,76,72,23,38,93}这一整数集生成一棵平衡二叉树。
河北大学课程考核参考答案及评分
( 2009—2010 学年第 1学期)
考核科目 数据结构 课程类别 必修课 考核方式 闭卷 卷别 B
一、选择题:(共20分,每小题2分)该题考查学生基本知识的掌握情况。
1、c 2、d 3、b 4、b 5、c 6、b 7、d 8、a 9、a 10、b
二、填空题:(共20分,每个空2分)
考核目的:学生对基本概念、知识点的掌握程度。
答案:
1、易读性 健壮性
2、0
3、n/2
4、p->next=L
5、1140
6、3
7、索引表
8、40,38,46,54,79,84
三、应用题:(共40分)
1、考核目的:本题考查学生对树和二叉树的认识
满分:9分
参考答案以及评分标准:
先序:ABECDFGHIJ (2分) 中序:EBCDAHIGFJ (2分)
(5分)
2、考核目的:学生对哈夫曼树的认识
评分标准:
2 1
3
4
7 8 5 6
15 11 10 9
26 19
45
(7分)
2*5+1*5+4*4+5*3+6*3+8*3+10*2+9*2=126 (2分)
3、(7分)
考核目的:学生对有向图的存储和拓扑排序的认识
评分标准:邻接矩阵存储表示3分,拓扑序列每个答案1分
152364;152634;156234;512364;512634;516234;561234(所有可能的情况)
4、(8分)
考核目的:学生对平衡二叉树的认识
考核目的:学生对平衡二叉树的认识
评分标准:每个旋转结果2分,平均查找长度2分
ASL=(1×1+2×2+4×3+1×4)/8=21/8 (2分)
5、考核目的:学生对堆排序的认识
评分标准:
3阶B-树(6分)
42、60 42 42 42、72 42、72
30 60 30 60、72 30 60 85 30 60 78、 85
72 72
42 85 42 85
30、41 60 78 90 30、41 60、66 78 90
删除72后(1分)
42、78
30 60、66 85、 90
四、算法设计:(共20分)
考核目的:考察学生对单链表结构的理解和掌握。
满分:10分
参考答案及评分标准:
typedef struct node //链表结点的结构 (1分)
{ int data;
struct node *next;
}Node,*Linklist;
void move( linklist list )
{q=list;p=list->next;r=list; //初始化三个指针 (2分)
while(p!=null)
{if(p->data>q->data) {s=r;q=p;} //寻找最大值结点地址 (2分)
r=p;p=p->next;} //移动指针 (1分)
if(q!=r)
{ if(q==list) list=list->next; //修改表尾 (4分)
else s->next=q->next;
r->next=q;
q->next=null;
}
}
2、(10分)
考核目的:学生对二叉树遍历编程能力的掌握情况
评分标准:各说明正确1分;树类型定义正确1分;函数实现的描述说明正确7分;函数程序正确1分
参考答案:
typedef struct node{
ELEM e; // e存放元素的值
struct node *lc,*rc;// lc、rc分别指向左右子女 (1分)
}NODE; //结点类型
class TREE //二叉树类定义
{public:
TREE ();
virtual ~ TREE ();
void xchg_child_node(NODE *pt); //交换子女结点方法函数
private:
NODE *rt; //指向二叉树根的指针
};
void TREE::xchg_child_node(NODE *pt)
{ //pt指向当前树的根 (1分)
NODE *s;
if(pt) //判断当前结点是否为空 (1分)
{ s=pt->lc;pt->lc=pt->rc;pt->rc=s; //交换子女(2分)
xchg_child_node(pt->lc); //继续处理左子树(2分)
xchg_child_node(pt->rc); //继续处理右子树(2分)
}
}
本文档为【数据结构习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。