for(j=1;j
s+=i*j;
A.O
(1)B.O(logn)C.O(n)D.O(n2)
32.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。
假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为(A)
A.q->next=s->next;s->next=p;B.s->next=p;q->next=s->next;
C.p->next=s->next;s->next=q;D.s->next=q;p->next=s->next;
33.在计算机内实现递归算法时所需的辅助数据结构是(A)
A.栈B.队列C.树D.图
34.假设以数组A[m]存放循环队列的元素。
已知队列的长度为length,指针rear指向队尾元素的下一个存储位置,则队头元素所在的存储位置为(B)
A.(rear-length+m+1)%mB.(rear-length+m)%m
C.(rear-length+m-1)%mD.(rear-length)%m
35.通常将链串的结点大小设置为大于1是为了(B)
A.提高串匹配效率B.提高存储密度
C.便于插入操作D.便于删除操作
36.带行表的三元组表是稀疏矩阵的一种(A)
A.顺序存储结构B.链式存储结构
C.索引存储结构D.散列存储结构
37.表头和表尾均为空表的广义表是(B)
A.()B.(())C.((()))D.((),())
38.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为(C)
A.n-1B.nC.n+lD.2n
39.为便于判别有向图中是否存在回路,可借助于(D)
A.广度优先搜索算法B.最小生成树算法
C.最短路径算法D.拓扑排序算法
40.连通网的最小生成树是其所有生成树中(D)
A.顶点集最小的生成树B.边集最小的生成树
C.顶点权值之和最小的生成树D.边的权值之和最小的生成树
二、填空题
1.数据的存储结构有两种方式,即__顺序____存储方式和__链式____存储方式。
2.对长度为n的顺序表执行插入元素操作,其插入算法的平均时间复杂度为_______O(n)_______。
3.以head为头指针的带头结点的单链表和循环单链表中,判断链表为空的条件分别是___head->next==NULL__和__head->next==head___。
4.设L为非空单链表,若要删除指针p所指结点的直接后继结点,则需执行下列语句序列:
q=p->next;__p->next=q->next_;free(q);
5.在顺序栈中设栈顶指针为top,则栈为空的条件是___TOP==0_________。
6.假设元素a,b,c,d按顺序依次进栈,若得到的出栈序列中第一个元素为c,则可能得到的出栈序列总数为____3________。
7.在队列中,允许进行删除操作的一端称为___队头________,允许进行插入操作的一端称为____队尾________。
8.循环队列Q的头指针和尾指针分别是front和rear,m表示该队列的最大容量,则循环队列为空的条件是___front==rear_____________,循环队列为满的条件是_______(rear+1)%m==front__________________。
9.在一棵高度为k的满二叉树中,结点总数为_____2k-1___________。
10.设完全二叉树有n个结点,若一个结点的编号为i(1≤i≤n),则它的左孩子结点的编号为_____2i____,右孩子结点的编号为___2i+1_______,双亲结点的编号为____i/2______。
11.构造连通网最小生成树的两个典型算法是____普里姆____算法和____克鲁斯卡尔_____算法。
12.在AOV网中,顶点表示___活动___________。
13.在排序过程中,主要进行的两种基本操作是关键字的___比较__________操作和记录的____移动_________操作。
14.数据的物理结构包括__数据元素_________的表示和____关系_______的表示。
15.设单链表的结点结构为(data,next),next为指针域,已知指针p指向单链表中data为x的结点,指针q指向data为y的新结点,若将结点y插入到结点x之后,则需要执行以下语句:
__q->next=p->next_;_p->next=q_____。
16.设某广义表H=(A,(a,b,c)),运用head函数和tail函数求出广义表H中某元素b的运算式__head(tail(head(tail(H))))______。
方法:
(tail(H)找出(a,b,c)在head找出(a),(b,c)在tail找出(b,c)在head找出B)
17.利用树的孩子兄弟表示法存储,可以将一棵树转换为____二叉树_______。
18.哈夫曼树是____带权路径长度最小的二叉树,又称最优二叉树_______。
19.有向图G的强连通分量是指__图G的极大强连通子图_______。
20.有n个顶点的无向完全图边的条数为___n*(n-1)/2______
21.已知一无向图G=(V,E),其中V={a,b,c,d,e}E={(a,b),(a,d),(a,c),(d,c),(b,e)}现用某一种图遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是______深度优先搜索___遍历方法。
22.根据排序过程中涉及的存储器不同,可将排序方法分为_外部排序__和__内部排序_
23.用结构数组R[0..n]存储待排序序列,用直接插入排序法进行排序,为避免数组越界,设置的监视哨为____R[0]_______。
得分
评卷人
三、简答题(24-25号、28-34号,每人1题)
1.已知一棵二叉树的中序遍历结果为DCBGEAHFIJK,后序遍历结果为DCEGBFHKJIA,试画出该二叉树。
2.简述逻辑结构与物理结构的区别与联系
3.简述线性表、栈、队列的区别与联系
4.线性结构与非线性结构有何差别?
5.数据结构如何分类?
有几种形式?
6.一棵度为2的树与一棵二叉树有何区别?
7.如果G是一个具有n个顶点的连通无向图,那么G最多有几条边?
最少有几条边?
8.证明:
具有n个结点的完全二叉树的深度为┗log2n┛+1。
9.若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?
为什么?
四、应用题
(1)(35-38号、40号,每人1题)
1.画出具有3个结点的二叉树的所有不同形态
2.对于下图所示的二叉树,写出先序、中序、后序遍历的序列
3.按给定序列{46、25、78、62、18、34、12、40、73}顺序构造一棵二叉排序树
4.给定4个叶子结点a、b、c、d,分别带权8、5、1、3,构造一棵含这4个叶子结点的哈夫曼树,并计算这棵树的带权路径长度(WPL)。
5.已知线性表L中有n个元素,要求在线性表的第i个位置前插入元素b。
在算法中有下划线的位置填空,使之成为完整、正确的算法。
(8分)
算法如下:
Typedefstruct
{
Elemtype*elem;/*存放数据元素的一维数组*/
intlen;/*len记录线性表的长度*/
intlistsize;/*listsize记录线性表空间的长度*/
}SeqList;
intInsertList(SeqList*L,inti,elemtypeb)
{
if(i>L->len+1)||(i<1)||(L->len>=L->listsize)
returnERROR;
else
for(j=L->len;j>=i;j--)
L->len=L->len+1;
returnTRUE;
}
五、应用题
(2)(41-45号,每人1题)
1.已知某系统在通信联络中只出现{A、B、C、D、E、F、G、H}8种字符,其出现概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试为这8种字符设计哈夫曼编码。
请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右孩子结点的权值,然后分别写出每个字符对应的编码。
2.分别用PRIME方法和Kruskal画出下面网络的最小生成树。
3.设待排序的记录共7个,排序码分别为8,3,2,5,9,1,6。
(1)用直接插入排序。
试以排序码序列的变化描述形式说明排序全程(动态过程)要求按递减顺序排序。
(2)用直接选择排序。
试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。
4.下面是一个在带头结点的单链表中交换值为x的结点与其前驱结点的算法,填空使之成为一个完整的算法。
(10分)
voidchange(LinkListhead,DataTypex)
{ListNode*p,*q;
intk;
p=head;q=head->next;
while(
(1)&&q->data!
=x){
p=q;
(2);
}
if(q!
=NULL&&p!
=head){
k=p->data;
(3);
q->data=k;
q=p;
}
}
(1)
(2)
(3)
5.二叉链表定义如下:
TypedefstructBiTNode{
Chardata;
StructBiTnode*lchild,*rchild;
}BiTNode,*BiTree;
阅读下列算法,并回答问题:
Voidf3(BiTree*T){
scanf(&ch);
if(ch==’’)T=NULL;
else{
if(!
(T=(BiTNode*)malloc(sizeof(BiTNode)))
exit(OVERFLOW);
T->data=ch;
f3(T->lchild);
f3(T->rchild);
}
returnOK;
}
该算法用于生成二叉树。
若用户输入:
ABD¢¢EG¢¢¢C¢F¢¢¢(其中,¢代表用户输入的空格),请画出调用f3(*p)所生成的二叉树。
(10分)
参考答案
一、单项选择题
1-5BACDC
6-10ABACD
11-15BACDA
16-20BAACD
21-25CBCAA
26-30BBBAA
31-35DAABB
36-40ABCDD
二、填空题
序号参考答案
(1)顺序、链式
(2)O(n)
(3)head->next==NULL
head->next==head
(4)p->next=q->next
(5)top==0或top==-1
(6)3
(7)队头、队尾
(8)front==rear、(rear+1)%m==front
(9)2k-1
(10)2i、2i+1、i/2
(11)普里姆、克鲁斯卡尔
(12)活动
(13)比较、移动
(14)数据元素关系
(15)q->next=p->nextp->next=q
(16)head(tail(head(tail(H))))
(17)二叉树
(18)带权路径长度最小的二叉树,又称最优二叉树
(19)图G的极大强连通子图
(20)n*(n-1)/2
(21)深度优先搜索
(22)外部排序内部排序
(23)R[0]
三、简答题
序号参考答案
1
2数据元素之间的逻辑关系称为逻辑结构;物理结构是指数据的逻辑结构在计算机中的映像即数据结构在计算机中的存储方法。
3栈和队列是操作受限的线性表。
栈只能在栈顶插入和删除元素。
栈的特点是后进先出。
队列只能在队尾插入元素,在队头删除元素。
队列的特点是先进先出。
4线性结构的前驱与后继之间为一对一关系,非线性结构的前驱与后继之间通常为一对多或多对多关系。
5集合结构、线性结构、树状结构、图状结构或网状结构
6二叉树的子树有左右之分,其次序不能任意颠倒。
7G最多有n(n-1)/2条边、最少有n-1条边
8证明:
假设此二叉树的深度为k,根据二叉树性质2及完全二叉树的定义得到:
2k-1-1即:
2k-1≤n〈2k
对不等式取对数,有
k-1≤log2n〈k
由于k是整数,所以有:
k=┗log2n┛+1
证毕。
9采用链式存储结构,它根据实际需要申请内存空间,而当不需要时又可将不用结点空间返还给系统。
在链式存储结构中插入和删除操作不需要移动元素。
四、应用题
(1)
序号
参考程序
1
2
A、B、D、E、G、C、F、H
D、B、G、E、A、C、F、H
D、G、E、B、H、F、C、A
3
4
WPL=8×1+5×2+(1+3)×3=30
5
L->elem[j+1]=L->elem[j];
L->elem[i]=b;
五、应用题
(2)
序号
参考答案
1
A:
0001
B:
11
C:
1010
D:
1011
E:
100
F:
01
G:
0000
H:
001
2
ACBDFEG
(AC)(AB)(EF)(BD)(DF)(CG)
3
1)直接插入排序
第一趟(3)[8,3],2,5,9,1,6第二趟
(2)[8,3,2],5,9,1,6
第三趟(5)[8,5,3,2],9,1,6第四趟(9)[9,8,5,3,2],1,6
第五趟
(1)[9,8,5,3,2,1],6第六趟(6)[9,8,6,5,3,2,1]
2)直接选择排序(第六趟后仅剩一个元素,是最小的,直接选择排序结束)
第一趟(9)[9],3,2,5,8,1,6第二趟(8)[9,8],2,5,3,1,6
第三趟(6)[9,8,6],5,3,1,2第四趟(5)[9,8,6,5],3,1,2
第五趟(3)[9,8,6,5,3],1,2第六趟
(2)[9,8,6,5,3,2],1
4
(1)q!
=null
(2)q=q->next
(3)p->data
5