软件班数据结构复习题.docx
- 文档编号:24216317
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:14
- 大小:77.36KB
软件班数据结构复习题.docx
《软件班数据结构复习题.docx》由会员分享,可在线阅读,更多相关《软件班数据结构复习题.docx(14页珍藏版)》请在冰豆网上搜索。
软件班数据结构复习题
数据结构复习样题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++; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 数据结构 复习题