软件班数据结构复习题.docx

上传人:b****4 文档编号:24216317 上传时间:2023-05-25 格式:DOCX 页数:14 大小:77.36KB
下载 相关 举报
软件班数据结构复习题.docx_第1页
第1页 / 共14页
软件班数据结构复习题.docx_第2页
第2页 / 共14页
软件班数据结构复习题.docx_第3页
第3页 / 共14页
软件班数据结构复习题.docx_第4页
第4页 / 共14页
软件班数据结构复习题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

软件班数据结构复习题.docx

《软件班数据结构复习题.docx》由会员分享,可在线阅读,更多相关《软件班数据结构复习题.docx(14页珍藏版)》请在冰豆网上搜索。

软件班数据结构复习题.docx

软件班数据结构复习题

数据结构复习样题2

一.单项选择题

【】1.组成数据的基本单位是

[A]数据项[B]数据元素[C]数据类型[D]数据变量

【】2.采用链式存储结构便于实现对线性表的

[A]插入[B]遍历[C]查找[D]定位

【】3.若循环队列用数组A[0..m-1]存放元素,其头尾指针分别为front和rear,则当前队列的长度是

[A](rear–front+m)%m[B]rear–front+1

[C]rear–front–1[D](rear–front)%m

【】4.已知广义表A=((a,b,c),(d,e,f)),从表A中取出原子e的运算是

[A]tail(tail(head(A)))[B]head(tail(tail(A)))

[C]tail(head(tail(head(A))))[D]head(tail(head(tail(A))))

【】5.具有2000个结点的二叉树,其高度至少为

[A]9[B]10[C]11[D]12

【】6.在邻接矩阵A中,第i顶点的入度为A中

[A]第i行非∞元素个数[B]第i列非∞元素个数

[C]第i行非∞且非0元素个数[D]第i列非∞且非0元素个数

【】7.对一个长度为12的有序表进行等概率的折半查找,查找成功所需的关键字比较平均次数为

[A]35/12[B]37/12[C]39/12[D]43/12

【】8.在下列所示的平衡二叉树中插入关键字48后得到一棵新平衡二叉树,在新平衡二叉树中,关键字37所在结点的左、右子结点保存的关键字分别是()

  

 

 

 

A.13,48

B.24,48

C.24,53

D.24,90

二.填空题

9.构成抽象数据类型的三个要素是数据对象、数据关系和___________________。

10.循环链表的主要优点是___________________________________。

11.具有后进先出特点的数据结构是。

12.在队列结构中,允许插入的一端称为______________________________。

13.前序和中序序列相同的二叉树的特征是____________________________________。

三.解答题

17.请直接在以下二叉树中添加后序线索。

18.已知一个长度为12的表为

(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)

(1)试将表中元素依次插入到一棵初始为空的二叉排序树(字符串之间按字典顺序比较大小)。

画出该二叉排序树,并求出等概率情况下查找成功的平均查找长度。

(2)设哈希表长度为13,哈希函数H(k)=i/2,其中i为关键字k中第一个字母在字母表中的序号(例如A和D的序号分别为1和4),用链地址法解决冲突。

请画出通过依次插入表中元素所构造的散列表,并求出在等概率情况下查找成功的平均查找长度。

19.假设电文中仅由a到h共8个字母组成,字母在电文中出现的频度依次为7,19,2,6,32,3,21,10

请画出由此构造的哈夫曼树(要求树中所有结点的左右孩子必须是左大右小),并写出这8个字母相应的哈夫曼编码。

20.若对序列(25,19,7,41,29,12,23,26)按升序排序,请分别给出

(1)步长为4的一趟希尔排序的结果;

(2)初始大根堆。

21.对于右边的带权图G,请

(1)画出G的邻接矩阵;

(2)画出G的最小生成树。

四.算法题

22.函数f22定义如下,其中函数调用Insert(L,i,k)在顺序表L的第i位置插入k。

voidf22(SqList&L,inti){

if(i>0){

f22(L,i-1);

for(intk=1;k<=i;k++)

Insert(L,i,k);

}

}

设有空顺序表L=(),请写出调用递归函数f22(L,3)后

(1)L的长度:

(2)L=()

23.算法f23(L)将带头结点的单链表L逆置。

请在画线处填空。

voidf23(LinkList&L){

LinkListp=L->next;

L->next=;

while(p){

LinkLists=;

p->next=L->next;

L->next=;

p=s;

}

}

24.s是一个升序静态查找表,请简要说明函数调用f24(s,1,s.length,k)的意义。

intf24(SSTables,intlow,inthigh,KeyTypek){

if(low>high)return0;

intmid=(low+high)/2;

if(k==s.elem[mid].key)returnmid;

if(k>s.elem[mid].key)returnf24(s,mid+1,high,k);

elsereturnf24(s,low,mid-1,k);

}

25.请对以下函数填空,实现求二叉树T中各结点的子孙总数,并填入结点的DescNum域中的算法。

intf25(BiTreeT){

if()return-1;

else{

T->DescNum=f25(T->lchild)+

+

;

returnT->DescNum;

}

}

26.图的邻接矩阵表示和算法f26描述如下:

#defineMaxNum5

typedefstruct{

charvexs[MaxNum];intarcs[MaxNum][MaxNum];intn,e;

}MGraph;

intf26(MGraphG,inti){

intd=0;

for(intj=0;j

if(G.arcs[i][j])d++;

if(G.arcs[j][i])d++;

}

returnd;

}

已知一个图G的邻接矩阵如下所示,

 

(1)给出执行算法调用f26(G,4)的返回值;

(2)简述该算法返回值的意义。

 

五、算法设计题 

请设计实现删除单链表中值相同的多余结点的算法,写出算法的C语言描述。

函数定义:

voidpurge(LinkListL)

单链表类型定义如下:

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

 

六、附加题

注意:

不答题或打错不扣分。

如答题得到的相应分数累加到总分

编写递归算法,计算二叉树中叶子结点的数目。

要求实现下列函数:

voidLeaves(BiTreebt,int&x);

/*CounttheleafnodeoftheBiTree*/

/*whoserootnodeisbttox.*/

二叉链表类型定义:

typedefstructBiTNode{

TElemTypedata;

BiTNode*lchild,*rchild;

}BiTNode,*BiTree;

 

数据结构复习样题答案2

一.单项选择题

1.B2.A3.A4.D5.C6.D7.B8.C

二.填空题

9.基本操作

10.从表中任一结点出发均可找到表中其他结点

11.栈

12.队尾

13.各结点均无左孩子

 

三.解答题

17.后序线索

18.已知一个长度为12的表为

(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)

(3)试将表中元素依次插入到一棵初始为空的二叉排序树(字符串之间按字典顺序比较大小)。

画出该二叉排序树,并求出等概率情况下查找成功的平均查找长度。

(4)设哈希表长度为13,哈希函数H(k)=i/2,其中i为关键字k中第一个字母在字母表中的序号(例如A和D的序号分别为1和4),用链地址法解决冲突。

请画出通过依次插入表中元素所构造的散列表,并求出在等概率情况下查找成功的平均查找长度。

0

1

2

3

4

5

6

7

8

9

10

11

12

May

Aug

Sep

Nov

Dec

Feb

July

Mar

Apr

Oct

June

Jan

成功的平均查找长度=18/12

19.假设电文中仅由a到h共8个字母组成,字母在电文中出现的频度依次为

7,19,2,6,32,3,21,10

请画出由此构造的哈夫曼树(要求树中所有结点的左右孩子必须是左大右小),并写出这8个字母相应的哈夫曼编码。

字符

哈夫曼码

a

0101

b

11

c

01111

d

0110

e

00

f

01110

g

10

h

0100

20.若对序列(25,19,7,41,29,12,23,26)按升序排序,请分别给出

(3)步长为4的一趟希尔排序的结果;

(4)初始大根堆。

答:

(1)(25,12,7,26,29,19,23,41)

(2)(41,29,23,26,25,12,7,19)

21.对于右边的带权图G,请

(3)画出G的邻接矩阵;

(4)画出G的最小生成树。

答:

(1)

(2)

四.算法题

22.函数f22定义如下,其中函数调用Insert(L,i,k)在顺序表L的第i位置插入k。

voidf22(SqList&L,inti){

if(i>0){

f22(L,i-1);

for(intk=1;k<=i;k++)

Insert(L,i,k);

}

}

设有空顺序表L=(),请写出调用递归函数f22(L,3)后

(1)L的长度:

6

(2)L=(1,2,3,2,1,1)

23.算法f23(L)将带头结点的单链表L逆置。

请在画线处填空。

voidf23(LinkList&L){

LinkListp=L->next;

L->next=NULL;

while(p){

LinkLists=p->next;

p->next=L->next;

L->next=p;

p=s;

}

}

24.s是一个升序静态查找表,请简要说明函数调用f24(s,1,s.length,k)的意义。

intf24(SSTables,intlow,inthigh,KeyTypek){

if(low>high)return0;

intmid=(low+high)/2;

if(k==s.elem[mid].key)returnmid;

if(k>s.elem[mid].key)returnf24(s,mid+1,high,k);

elsereturnf24(s,low,mid-1,k);

}

答:

在s中递归折半查找k。

25.请对以下函数填空,实现求二叉树T中各结点的子孙总数,并填入结点的DescNum域中的算法。

intf25(BiTreeT){

if(!

T)return-1;

else{

T->DescNum=f25(T->lchild)+

f25(T->rchild)+

2;

returnT->DescNum;

}

}

26.图的邻接矩阵表示和算法f26描述如下:

#defineMaxNum5

typedefstruct{

charvexs[MaxNum];intarcs[MaxNum][MaxNum];intn,e;

}MGraph;

intf26(MGraphG,inti){

intd=0;

for(intj=0;j

if(G.arcs[i][j])d++;

if(G.arcs[j][i])d++;

}

returnd;

}

已知一个图G的邻接矩阵如右所示,

 

(1)给出执行算法调用f26(G,4)的返回值;答:

5;

(2)简述该算法返回值的意义。

答:

求图G第i顶点的度。

五、算法设计题 

请设计实现删除单链表中值相同的多余结点的算法,写出算法的C语言描述。

voidpurge(LinkListL){

//删除链表中的“冗余”元素

LinkLists,q,p=L->next;

while(p){//p指向当前被考察的结点

q=p;

while(q->next)//考察q所指后继结点

if(q->next->data!

=p->data)q=q->next;

else//修改指针并释放结点空间

{s=q->next;q->next=s->next;free(s);}

p=p->next;

}//whilep

}//purge

 

六、附加题

voidLeaves(BiTreebt,int&x)

{

if(bt==null)return;

Leaves(bt->lchild,x);

Leaves(bt->rchild,x);

if((bt->lchild==null)&&(bt->rchild==null))

x++;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1