a[i][j]=i*j;
intf(unsignedintn){
if(n==0||n==1)return1;
elsereturnn*f(n-1);
A找出数据结构的合理性
B研究算法中输入和输出的关系
C分析算法的效率以求改进
D分析算法的易懂性和文档性
20、设单链表中结点结构为(data,link).若想摘除结点*p的直接后继,则应执行下列哪一个操作(口)
Ap->link=p->link->link;
Bp=p->link;p->link=p->link->link;
Cp->link=p->link;Dp=p->link->link;
21、设单循环链表中结点的结构为(data,link),且rear是指向非空的带表头结点的单循环链表的尾结点的指针。
若想删除链表第一个结点,则应执行下列哪一个操作(口
As=rear;rear=rear->link;deletes;
Brear=rear->link;deleterear;
Crear=rear->link->link;deleterear;
Ds=rear->link->link;rear->link->link=s->link;deletes;
为指向链表表头的指是否达到链表表尾的
f和r,则判断队空
22、设单循环链表中结点的结构为(data,link),且first
针,current为链表当前指针,在循环链表中检测current语句是(D)。
Acurrent->link=nullBfirst->link=current
Cfirst=currentDcurrent->link=first
23、一个栈的入栈序列为a,b,c,则出栈序列不可能的是
Ac,b,aBb,a,cCc,a,bDa,c,b
25、栈和队列的共同特点是(CX。
A都是先进后出B都是先进先出
C只允许在端点处插入和删除D没有共同点
26、假定一个顺序存储的循环队列的队头和队尾指针分别为
27、当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为(B)
29、设链式栈中结点的结构为(data,link),且top是指向栈顶的指针。
若想摘除链式栈的栈顶结点,并将被摘除结点的值保存到x中,则应执行下列(操作。
Ax=top->data;top=top->link;Btop=top->link;x=top->data;
Cx=top;top=top->link;Dx=top->data;
30、设循环队列的结构是:
constintMaxsize=100;
typedefintDataType;
typedefstruct{
DataTypedata[Maxsize];
Intfront,rear;
}Queue;
若有一个Queue类型的队列Q,试问判断队列满的条件应是下列哪一个语句
AQ.front==Q.rear;BQ.front-Q.rear==Maxsize;
CQ.front+Q.rear==Maxsize;DQ.front==(Q.rea叶1)%Maxsize;
31、设有一个递归算法如下:
intfact(intn)
{if(n<=0)return1;
elsereturnn*fact(n-1);
下面正确的叙述是(B)
A计算fact(n)需要执行n次递归Bfact(7)=5040
C此递归算法最多只能计算到
fact(8)
D
以上结论都不对
34、
广义表A(a),则表尾为(
C)
Aa
B(())
C
空表
D
(a)
35、
下列广义表是线性表的有(
C)
AE
(a,(b,c))B
E(a,E)
CE(a,b)
D
E(a,L())
38、对于任何一棵二叉树T,如果其终端结点数为no,度为2的结点为n2.,贝U
(A)
Ano=n?
+1Bn2=no+1Cn0=2n2+1Dn2=2no+1
40、已知一个顺序存储的线性表,设每个结点需占m个存储单元,若第一个结点
的地址为da1,则第I个结点的地址为(A)。
Ada1+(I-1)*mBda1+I*mCda1-I*mDda1+(I+1)*m
42、对线性表进行折半搜索时,要求线性表必须(C2J
A以链接方式存储且结点按关键码有序排列B以数组方式存储
C以数组方式存储且结点按关键码有序排列D以链接方式存储
A散列存储
43、顺序搜索算法适合于存储结构为(B)的线性表。
顺序存储或链接存储
索引存储
C压缩存储44、采用折半搜索算法搜索长度为n的有序表时,元素的平均搜索长度为(|C)
AO(n2)BO(nlog2n)CO(log2n)DO(n)
48、对包含n个元素的散列表进行搜索,平均搜索长度为(C)
AO(log2n)BO(n)C不直接依赖于nD上述都不对
二、填空题()
1、数据的逻辑结构被分为集合结构、线性结构、树形结构、图形结构四种
2、数据的存储结构被分为顺序结构、链接结构、索引结构、散列结构四种
3、一种抽象数据类型包括(数据)和(操作)两个部分。
5、栈、队列逻辑上都是(线性存储)结构。
6、线性结构反映结点间的逻辑关系是(一对一)的,图中的数据元素之间的关系是(多对多)的,树形结构中数据元素间的关系是(一对多)的。
7、栈中存取数据的原则(后进先出),队列中存取数据的原则(先进先出)
10、一维数组的逻辑结构是(线性结构),存储结构是(顺序存储表示)。
对于二维数组,有(行优先顺序)和(列优先顺序)两种不同的存储方式,对于一个
二维数组A[m][n],若采用按行优先存放的方式,则任一数组元素A[i][j]相对于A[0][0]的地址为(n*i+j)。
11、向一个顺序栈插入一个元素时,首先使(栈顶指针)后移一个位置,然后把待插入元素(写)到这个位置上。
从一个顺序栈删除元素时,需要前移一位
(栈顶指针)。
12、在一个循环队列Q中,判断队空的条件为(Q.front==Q.rear),判断队满的条件为((Q.rea叶1)%MaxSize==q.front
13、对于一棵具有n个结点的树,该树中所有结点的度数之和为(n-1)。
15、若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一维数组中,即编号为0的结点存储到a[0]中,其余类推,贝Ua[i]元素的左子女结点为(2*i+1),右子女结点为(2*i+2),双亲结点(i>=1)为(「(i-1)/2
n).
16、在一个最大堆中,堆顶结点的值是所有结点中的(最大值),在一个最小堆中,堆顶结点的值是所有结点中的(最小值)。
17、已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,
第一个元素的地址为LOC(a1),那么,LOC(ai)=LOC(a1)+(i-1)*k20、由一棵二叉树的前序序列和(中序序列)可唯一确定这棵二叉树。
21、以折半搜索方法搜索一个线性表时,此线性表必须是(顺序)存储的(有序)表。
25、在一个无向图中,所有顶点的度数之和等于所有边数的
(2)倍。
在一个具
有n个顶点的无向完全图中,包含有(n(n-1)/2)条边,在一个具有n个顶点的有向完全图中,包含有(n(n-1))条边。
26、对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为(n)和(n-1)o
28、在插入和选择排序中,若初始数据基本正序,则选择(插入排序),若初始数据基本反序,则最好选择(选择排序)o
29、算法是对特定问题的求解步驟的一种描述,它是(指令)的有限序列,每一条(指令)表示一个或多个操作。
36、假定一组记录的排序码为(56,46,79,38,40,80),对其进行快速排序的第一次划分的结果是([404638]56[7980])。
38、设Ki=Kj(1<=i<=n,1<=j<=n,j<>i)且在排序前的序列中Ri领先于Rj(i44、从一棵B-树删除关键码的过程,若最终引起树根结点的合并,贝慚树比原树的高度(减1)
46、在散列存储中,装载因子a又称为装载系数,若用m表示散列表的长度,n表示待散列存储的元素的个数,则a等于(n/m)o
48、在对m阶B-树中,每个非根结点的关键码数最少为(「m/2门-1)个,最多
为(m-1)个,其子树棵数最少为(「m/2「),最多为(m)o
判断题
1、数据元素是数据的最小单位(X)o
2、数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要建立的
3、数据结构是指相互之间存在一种或多种关系的数据元素的全体丄X)o
4、从逻辑关系上讲,数据结构主要分为两大类:
线性结构和非线性结构(话
5、线性表的逻辑顺序与物理顺序总是一致的(X)o
6、每种数据结构都应具备三种基本运算:
插入、删除、搜索(话。
7、非空线性表中任意一个数据元素都有且仅有一个直接前驱元素。
(X)
12、完全二叉树就是满二叉树。
(X)
13、已知一棵二叉树的前序序列和中序序列可以唯一地构造出该二叉树。
(V)
14、带权连通图的最小生成树的权值之和一定小于它的其它生成树的权值之和。
15、线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻。
(V)
19、AOE网是一种带权的无环连通图。
(V)
21、二叉排序树可以是一棵空树(V)
22、线性表中所有结点的类型必须相同。
(V)
24、任何无环的有向图,其结点都可以排在一个拓扑序列里。
(V)
25、队列逻辑上是一个下端口和上端能增加又能减少的线性表(X)
27、用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间
大小只与图中顶点个数有关,而与图的边数无关(V
28、邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
(X)
29、连通分量是无向图中的极小连通子图。
(X)
30、在AOE网络中一定只有一条关键路径。
(X)
31、关键活动不按期完成就会影响整个工程的完成时间。
(话
32、平衡二叉树的左右子树深度之差的绝对值不超过10(V)
34、直接选择排序稳定。
(X)
38、在散列法中,一个可用散列函数必须保证绝对不产生冲突0(X)
39、任何一个关键活动延迟,那么整个工程将会延迟0(V)
40、任何一个关键活动提前完成,那么整个工程将会提前完成0(X)
四、运算应用题
(1)写出执行f30(a,b)的返回值,其中a和b分别为指向存储集合{2,4,5,7,9,12}和{2,4,5,7,9}的链表的头指针;
(2)简述算法f30的功能;
intf30(LinkListha,LinkListhb)
{
//LinkList是带有头结点的单链表
//ha和hb分别为指向存储两个有序整数集合的链表的头指针
LinkListpa,pb;
pa=ha->next;
pb=hb->next;
while(pa&&pb&&pa->data==pb->data)
{pa=pa->next;
pb=pb->next;
}
if(pa==NULL&&pb==NULL)return1;elsereturn0;
}
2、intAA(LNode*HL,ElemTypex){
intn=0;
LNode*p=HL;
while(p!
=NULL)
{
if(p->data==x)n++;p=p->next;
}
returnn;
}
编程题
1.设有一单链表L,结点结构为data|next,结点个数至少3个,试画出链表L的结构图,并编写算法判断该单链表L中的元素是否成等差关系,即:
设各元素值次为印砂念,…,an,判断a+1-ai=ai-a/是否成立,其中i满足2<=i<=n-1.(8分)
lchild|data|rchild,|其中data
data域为数字的字符(即
2.设有一棵二叉树以二叉链表作为存储结构,结点结构为域中存放一个字符,设计一个算法按前根遍历顺序仅打印出,0?
<=data<=,9?
(6分)
1、
:
intisrise(lklistL)
{p=L->next;b=p->data-L->data;
while(p->next!
=NULL)
{q=p->next;
if(q->data-p->data!
=b)return(0)
elsep=q;
}return
(1);
}
2.VoidNchar(bitreptrt)
{if(t!
=Null)
{if(t->data>=?
0?
)&&(t->data<=,9?
printf(%d”,t->data);
Nchar(t->lchild);
Nchar(t->rchild);}
}