选择题:
1、在数据结构中,线性结构中元素之间存在____关系。
A: 一对一
B: 一对多
C: 多对一
D: 多对多
2、数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的____和运算等的学科。
A: 结构
B: 关系
C: 操作
D: 算法
3、算法分析的两个主要方面是____。
A: 空间复杂度和时间复杂度
B: 正确性和简明性
C: 可读性和文档性
D: 数据复杂性和程序复杂性
4、顺序表中逻辑上相邻的节点其物理位置也____。
A: 一定相邻
B: 不必相邻
C: 按某种规律排列
D: 无要求
5、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行____。
A: s->next=p->next; p->next=s;
B: p->next=s->next; s->next=p;
C: q->next=s; s->next=p;
D: p->next=s; s->next=q;
6、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是____。
A: edcba
B: decba
C: dceab
D: abcde
7、循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是____。
A: (rear-front+m)%m
B: rear-front+1
C: rear-front-1
D: rear-front
8、关于空格串,下列说法中正确的有____。
A: 空格串就是空串
B: 空格串是零个字符的串
C: 空格串的长度为零
D: 空格串的长度就是其包含的空格个数
9、数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为____。
A: SA+140
B: SA+144
C: SA+222
D: SA+225
10、对于一棵满二叉树,m个树叶,n个节点,深度为h,则____。
A: n=h+m
B: h+m=2n
C: m=h-1
D: n=2h-1
11、具有65个结点的完全二叉树其深度为____。
(根的层次号为1)
A: 8
B: 7
C: 6
D: 5
12、满二叉树____二叉树。
A: 一定是完全
B: 不一定是完全
C: 不是
D: 不是完全
13、将一棵有100个节点的完全二叉树从上到下,从左到右依次对节点进行编号,根节点的编号为1,则编号为49的节点的左孩子编号为____。
A: 99
B: 98
C: 50
D: 48
14、如果T2是由森林T转换而来的二叉树,那么T中结点的后序遍历就是T2中结点的____。
A: 先序遍历
B: 中序遍历
C: 后序遍历
D: 层次遍历
15、将递归算法转换成对应的非递归算法时,通常需要使用____。
A: 栈
B: 队列
C: 链表
D: 树
16、如果某二叉树的前序为stuwv,中序为uwtvs,那么该二叉树的后序为____。
A: uwvts
B: vwuts
C: wuvts
D: wutsv
17、设有13个值,用它们组成一棵哈夫曼树,则该哈夫曼树中共有____个结点。
A: 13
B: 12
C: 26
D: 25
18、按照二叉树的定义,具有3个结点的二叉树有____种。
A: 3
B: 4
C: 5
D: 6
19、如图所示的4棵二叉树中,____不是完全二叉树。
A: B:
C: D:
20、所谓稀疏矩阵指的是____。
A: 零元素个数较多的矩阵
B: 零元素个数占矩阵元素总个数一半的矩阵
C: 零元素个数远远多于非零元素个数且分布没有规律的矩阵
D: 包含有零元素的矩阵
二、序列(a,b,c,d,e)已存在静态链表如下图a,头指针指向1号结点。
请完成:1.在静态链表中标出此序列的逻辑关系。
2.画出依次执行了b前插入f,删除e,c后插入g操作后的新的静态链表图b。
1
1
2
c
2
3 e
3
4 a
4
5 d
5
6 b
6
7
7
图a
图b
三、已知一个稀疏矩阵如下:1.给出它的三元组顺序表表示
2. 给出它逆置后的三元组顺序表
3.给出它的十字链表表示
0 2 0 0 0 0
1 0 0 0 0 0
0 3 0 0 0 0
0 0 0 0 4 0
0 5 0 0 0 6
i
j
v
i j v
A B
四、对下图的二叉树完成如下要求:
1.写出该树的深度
2.写出该深度的满二叉数的总结点数
3.写出二叉树的后序遍历的序列
4.将二叉树还原成森林
A
B F
C G H
D I J
E
五、假设用于通信的电文仅由8个字母(A—H)组成,字母在电文中出现的频率分别为0.07,
0.19,0.02,0.06,0.32,0.03,0.21,0.10。
试用这8个字母进行以下操作:
1.构造一棵赫夫曼树(左结点的权小于右结点的权)
2.求出带权路径的长度
3.设计赫夫曼编码(左分支为“0”,右分支为“1”)
六、任意一棵有N个结点的二叉树,已知它有M个叶子结点。
试证明非叶子结点中度数为2的有M-1个,其余的度数为1。
七、简述以下算法的功能(栈和队列的元素类型为int)。
void algo (Queue &Q) {
Stack S; int d;
InitStack(S);
While (!QueueEmpty(Q)) {
DeQueue(Q,d); Push (S,d);
}
While (!StackEmpty(S)) {
Pop(S,d); EnQueue (Q,d);
}
}
八、算法题:
1、设计一个算法按层次输出二叉树中的所有结点,要求同一层次的从左向右输出(存储按二叉树表)。
2、已知一单链表,头指针为h,指向表头结点,请写出算法对此单链表就地逆转。
(h仍旧为逆转后的单链表的头指针指向表头结点)。
注:逆转为:原单链表的序列为(a1,a2...an),则逆转后为(an,an-1, (1)
3、写一算法,实现统计带表头的单链表中元素值为奇数的接点个数。
九、已知线性链表如下图,头指针为La,写出语句序列使左图中的指针指向改成右图中的指针指向。
十、在一个C语言程序中,有结构类型STUDENT的定义和结构数组allstudents的声明如下:
struct STUDENT
{
char name[8];
int number;
}
STUDENT allstudents[10][50];
allstudents是一个二维数组,它的每个元素都是包含name和number的结构类型。
已知在C语言中,二维数组使用以行序为主序的存储结构,char类型占用1字节,int类型占用4字节。
假定allstudents在内存中的起始存储位置是2000,请写出计算allstudents[i][j]的存储位置的算式,并计算allstudents[3][5]的存储位置。
十一、用下标从0到4的一维数组存储一个循环队列,目前其中有两个元素A、B,状态如图(a)。
如果此后有17个数据元素C、D、……P、Q、R、S依次进队列,其间又有16个元素先后出队列,请在图(b)中填写队列最后的状态,包括其中的元素和指针的位置。
rear→
B
front→
A
(a)
(b)
十二、附加题:
1、Josephus问题是下面的游戏:N个人从1到N编号,围坐成一个圆圈。
从1号开始传递一个热土豆。
经过M次传递后拿着热土豆的人被清除离座,围坐的圆圈缩小,由坐在被清除的人后面的人拿土豆继续进行游戏。
最后剩下的人取胜。
因此,如果M=0和N=5,则依次被清除的人的顺序是2,4,1,5。
a.写一个算法思想解决M和N在一般值下的Josephus问题,应使你的程序尽可能地高效,要确保能够清除单元。
(包括采用的数据结构、方法)
b.估计你的程序时间复杂度。
2.计算n!的递归函数fac(n)如下,试分析它的时间复杂度。
(请写出详细的分析步骤)
Int fac(int n)
{
If(n<=1) return 1;
else return(n*f(n-1));
}。