2016 年江西师范大学数据结构与程序设计考研真题
一、单项选择题(每小题 2 分,共 20 分)
1.对于逻辑结构 B,如果它只有一个开始结点和一个终端结点,而其他的每一个结点有且仅-
有一个前驱和一个后继,则称为()
A.网状结构
B.线性结构
C.图形结构
D.树型结构
2.线性表若采用链式存储结构时,要求内存中可用存储单元的地址()
A.必须是连续的
B.部分地址必须是连续的
C.一定是不连续的
D,连续不连续都可以
3.队列是一种特殊的线性表,具有()的性质。
A.先进先出
B.先进后出
C.后进后出
D.顺序进出
4.设非空的循环单链表 head 的尾结点由 p 所指向,则该尾结点满足()
A.p->next==NULL
B.p==NULL
C.p->next==head
D.p==head
5.一棵具有 5 层的满二叉树所包含的结点个数为()
A.15
B.31-
C.63
D.32
6.将一棵有 100 个结点的完全二叉树,按照从上到 T、、同…-层次上按从左到右的顺序对所
有结点从 1 开始编号,则编号为 49 的结点,其左孩子编号为()
A.98
B.99
C.50
D.48
7.若无向图 G 是具有 6 个顶点的连通图,则至少具有()条边。
A.5
B.6
C.7
D.8
8.适用于二分法检索的表的存储方式及元素排列要求为()
A.链式方式存储,元素无序
B.链式方式存储,元素有序
C.顺序方式存储,元素无序
D.顺序方式存储,元素有序
9.在关键字序列{1,3,9,12,32,找关键字为 81,45,62,75,78,81,93,99}中,二分査的结点
81 时,通过()次比较后査找成功。
A.1
B.2
C.4
D.8
10.下面几种排序方法中,空间复杂度最高的是()
A.快速排序
B.选择排序
C.归并排序
D.插入排序
二、填空题(每小题 2 分,共 20 分)
1.数据的存储结构主要有 4 种•:顺序存储、链式存储、()和()
2.一个算法的复杂度可分为()复杂度和()杂度。
3.设栈 S 的初始状态为空,元素 T、2、3、4、5 依次全部进栈,然后所有元素依次出栈,
则出栈序列为().
4.表达式 A*(B+C)/(D-E+F)的后缀表达式是()。
5.在一个单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,应执行语句()
6.对于一个循环单链表,若首指针为 head,指针 p 指向表中的某个结点,则 p 所指结点是该
表中最后一个结点的特征是()
7.一棵非空二叉树的第 i(>1)层上最多有()个结点。
8.在无向图 G 的邻接矩阵 A 中,若 A[i][j]^于 1,则等于().。
9.设图 G 是一个具有 n 个顶点的无向连通图,则 G 的生成树的边数为()
10.要解决散列引起的冲突问题,常用的 3 种方法是开放定址法、()和()
三、程序填空与程序分析题(每小题 6 分,共 24 分)
1.阅读下列程序,写出程序运行的输出结果。
#include
voidmain()
(
inti,j;
i=l;
while(i<4)
(
for(j-1;j<2*i+l;j++)
printf(H%c"/'#1);
printf("\n");
*
i++;
)
)
2.设单链表的存储结构定义如下:
typedefintdatatype;
'
typedefstructlink_node{
datatypeinfo;
structlink_node*next;
)node;
typedefnode*linklist;
阅读以下程序,并回答程序后的问题:
node*fun(node*headzdatatypex)
{
node*pm=head,
q=head->next;
while(q&&q->info!=x)
(
pre=q;q=q->next;
}
if(q)
{
pre->next=q->next;
free(q);
}
returnhead;
(1)请描述函数 fun()的功能;
(2)定义变量如下:
linklisthead;
设 head 链表如图 1 所示。
请画出执行函数调用语句 head=fun(head,2)之后的 head 链表。
3.设二叉树的存储结构定义如下:
typedefstructnode(/*二叉树结点定义*/datatypedata;
structnode*lchildz*rchild;
)bintnode;
typedefbintnode*bintree;
函数 isequal 的功能是判断给定的两棵二叉树 tl 和 t2 是否等价,并返回 0 或丄的结果。请
将程序空白处补充完整。
intisequal(bintreetlzbintreet2)
(intb=0;
if(tl==NULL&&t2==NULL)(1)
else
if(tl!t2!=NULL)
if(tl->data==
if(isequal(tl->lchildzt2->lchild)
b=
(2) )
;
(3) ;
returnb;
}
4.设顺序表的结构定义如下:
#defineMAXSIZE100
typedefintdatatype;
typedefstruct(
datatypea[MAXSIZE];.
intsize;
}seqlist;
函数 split 的功能是将给定顺序表 LI 中的数据进行分类,奇数存放到存到顺序表 L2 中,偶
数存到顺序表 L3 中。请将程序空白处补充完整。
voidsplit(seqlist*L1Zseqlist*L2Zseqlist*L3)
(
intjzk;
i=j=k=O;
for(i=0;isize;i++)