标签:
挂科考试 |
1.填空题
1. 数据结构被形式地定义为(D, R),其中D是 数据元素 的有限集合,R是D上的 关系的 有限集合。
2. 数据结构包括数据的逻辑结构、数据的 存储结构
3. 数据结构按逻辑结构可分为两大类,它们分别是线性结构
和非线性结构
5.在线性结构中,第一个结点
6. 在树形结构中,树根结点没有
7. 在图形结构中,每个结点的前驱结点数和后续结点数可以 是任以多 。
8. 数据的存储结构可用四种基本的存储方法表示,它们分别是顺序 、 链式 、 索引 和 散列。
9.数据的运算最常用的有5种,它们分别是
11.数据结构是研讨数据的_(1)逻辑结构_和_(2)物理/_存储结构,以及它们之间的相互关系,并对与这种结构定义相应的_(3)操作/运算_,设计出相应的(4)算法_。
12. 下面程序段中带下划线的语句的执行次数的数量级是(
nlog2n
i=1;
WHILE i<n {
3、填空题
1.
2.
栈是一种特殊的线性表,允许插入和删除运算的一端称为
3.
4.
在具有n个单元的循环队列中,队满时共有
5.
4一5、填空题
1.
4. 子串的定位运算称为串的模式匹配; 被匹配的主串
6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
7.
假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为
8. 设数组a[1…60,
1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为
9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素
的
10. 求下列广义表操作的结果:
(1)
GetHead【((a,b),(c,d))】===
(2)
GetHead【GetTail【((a,b),(c,d))】】===
(3)
GetHead【GetTail【GetHead【((a,b),(c,d))】】】===
(4)
GetTail【GetHead【GetTail【((a,b),(c,d))】】】===
6、填空题
2.
一棵深度为6的满二叉树有
3.一棵具有257个结点的完全二叉树,它的深度为
4.
5.
设一棵完全二叉树具有1000个结点,则此完全二叉树有
6. 一棵含有n个结点的k叉树,可能达到的最大深度为
7. 二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按N
L
R次序),后序法(即按
8.
中序遍历的递归算法平均空间复杂度为
9. 用5个权值{3, 2, 4, 5,
1}构造的赫夫曼(Huffman)树的带权路径长度是
7、填空题
1. 图有
2.
有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的
3.
如果n个顶点的图是一个环,则它有
4. n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为
5. n个顶点e条边的图,若采用邻接表存储,则空间复杂度为
6. 设有一稀疏图G,则G采用
7. 设有一稠密图G,则G采用
8. 图的逆邻接表存储结构只适用于 有向
9. 已知一个图的邻接矩阵表示,删除所有从第i个顶点出发的方法是
10. 图的深度优先遍历序列
不是
11. n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为
12.
n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为
13. 图的BFS生成树的树高比DFS生成树的树高
14.
用普里姆(Prim)算法求具有n个顶点e条边的图的最小生成树的时间复杂度为
15. 若要求一个稀疏图G的最小生成树,最好用
16. 若要求一个稠密图G的最小生成树,最好用
17.
用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度
18.
9、填空题
1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是
2.
线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索
3.
假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为
解:显然,平均查找长度=O(log2n)<5次(25)。但具体是多少次,则不应当按照公式
全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74;
ASL=74/20=3.7
4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素
5.
在各种查找方法中,平均查找长度与结点个数n无关的查找方法是
6. 散列法存储的基本思想是由
7. 有一个表长为m的散列表,初始状态为空,现将n(n<m)个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。如果这n个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。(而任一元素查找次数 ≤n-1)
1.应用软件是指_____D____.
A)所有能够使用的软件
C)所有微机上都应使用的基本软件 D) 专门为某一应用目的而编制的软件
2. 数据结构中,与所使用的计算机无关的是数据的
A)
存储
3. 算法分析的目的是__C__________
A)
找出数据结构的合理性
C)
分析算法的效率以求改进
4.
计算机算法必须具备输入、输出和
A)
可行性、可移植性和可扩充性
C)
确定性、有穷性和稳定性
5. 下面说法错误的是(A
6.从逻辑上可以把数据结构分为(C)两大类。
A.动态结构、静态结构
C.线性结构、非线性结构
7.连续存储设计时,存储单元的地址(
A.一定连续
C.不一定连续
二、单项选择题
(
(A)存储结构
(
(A)110
(
(A)
(B)
(C)
( B
(A)8
(
(A)
(B)
(C) 只有一部分,存储表示结点间关系的指针
(D) 分两部分,一部分存放结点值,另一部分存放结点所占单元数
(
(A)顺序
(
(A)必须是连续的
(C)一定是不连续的
(
(A)需经常修改L中的结点值
(C)L中含有大量的结点
(
(A)大于1; (B)等于1;
(
|
P0 |
|
|
3 |
|
|
4 |
|
|
P0 |
à |
a1 |
3 |
à |
a2 |
4 |
à |
A3 |
0 |
(A)循环链表
(
A.先进先出
(
(
b
A.ST->top<>0
C.ST->top<>m0
(
B.QU->rear -
QU->front -1= = m0
(
(A)r-f; (B)(n+f-r)% n; (C)n+r-f; (D)(n+r-f)% n
( B
C.可以链式存储
(
(
(
(
右图所示)按行序存放在一维数组B[ 1, n(n-1)/2
]中,对下三角部
分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:
A.i(i-1)/2+j-1
C.i(i+1)/2+j-1
6.
从供选择的答案中,选出应填入下面叙述
有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。
存储数组A的最后一个元素的第一个字节的地址是
供选择的答案
A~E:①28
答案:A=
7.
从供选择的答案中,选出应填入下面叙述
有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是
供选择的答案
A~D:①12
答案:A=
(
(A)是一棵树;
(C)是一棵树也是一棵二叉树;
(
(A)它不能用顺序存储结构存储;
(C)顺序存储结构和链式存储结构都能存储;
(
(A) élog2(n)ù
( a
(A)唯一的
(C)有多种,但根结点都没有左孩子
6. 二叉树
供选择的答案
A: ①是特殊的树
B:
C~D:
①最左子结点
答案:A=
(C )1.
在一个图中,所有顶点的度数之和等于图的边数的
(
(
(
(
(
A.栈
(
A.栈
A.0 2 4 3 1 5 6 B. C. D. |
(
(
A. 0 2 4 3 1 5
6
(
A. 0 2 4 3 6 5
1
(
A. 0 2 4 3 1 6
5
(
A.先序遍历
(
A.先序遍历
(
A.只有一棵
(
A.20,70,30,50
(
A.3
(
A.顺序
(
三.判断题
1. 数据元素是数据的最小单位。(
2. 记录是数据处理的最小单位。 (×
3.
数据的逻辑结构是指数据的各数据项之间的逻辑关系;(
4.算法的优劣与算法描述语言无关,但与所用计算机有关。(
5.健壮的算法不会因非法的输入数据而出现莫名其妙的状态。(√
6.算法可以用不同的语言描述,如果用C
语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。(
7.程序一定是算法。(×
8.数据的物理结构是指数据在计算机内的实际存储形式。(√ )
9. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(×)
10. 数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构. (×
(
(
(
(
(
(
(
(
(
(
× )1. 在表结构中最常用的是线性表,栈和队列不太常用。
( √ )2. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
( √ )3.
对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
(
(
(
√ )7. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
(√ )1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。
(×
)2.二叉树中每个结点的两棵子树的高度差等于1。
(√)3.二叉树中每个结点的两棵子树是有序的。
(
(
(
(×
(×
(
(
四、简答题
1. 试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?
①顺序存储时,相邻数据元数素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大存储空间利用率高。缺点:插入删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部份存放结点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入删除这样的动态操作
若线性表的长度变化不大,其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,其主要操作是,插入,删除操作,则采用链式表。
2 . 在单链表中设置头结点的作用是什么?
答:为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。
五、线性表具有两种存储方式,即顺序方式和链接方式。现有一个具有五个元素的线性表L={23,17,47,05,31},若它以链接方式存储在下列100~119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节)组成,如下所示:
05 |
U |
17 |
X |
23 |
V |
31 |
Y |
47 |
Z |
|
^ |
|
|
|
|
|
|
|
|
|
^ |
100 |
|
|
|
|
|
|
|
|
|
120 |
其中指针X,Y,Z的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?
X=116
四、简答求解题
2. 设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有
①
front=11,rear=19;
2.用队列长度计算公式:
① L=(40+19-11)%
40=8
五、算法设计
1.
这就是解决队满队空的三种办法之① 设置一个布尔变量以区别队满还是队空(其他两种见简答题);
思路:一开始队空,设tag=0,若从rear一端加到与front指针相同时,表示入队已满,则令tag=1;
若从front一端加答:#define m0 100
Int top=0,i=1;
Tag=1;
While(i<=m0 && tag)
{if(exp[i]==’(‘exp[i]==’[exp[i]==’{‘}
{top++
St[top]=exp[i];
}
If(exp[i]==’)’)
If(st[top]==’(‘)top__;
Else tag=0;
If(exp[i]==’)’)
If(st[top]==’{‘top--;
Else tag=0;
I++
}
If(top>0)tag=0;
}到与rear指针相同时,则令tag=0,表示出队已空。
三、计算题
1.
求Replace (s,’STUDENT’, q) 和Concat (SubString (s,6,2), Concat (t, SubString (s,7,8)))。
解(1)Replace(s,’STUDENT’,q)=’I AM A WORKER’
(2)因为
SubString(s,6,2)=’A’:
Coucat(t,SubString(s,7,8))=’GOOD STUDENT’
所以Concat(SubString(s,6,2),Concat(t,SubString(s,7,8)))=’A GOOD STUDENT’
2.
已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBADADA’。写出模式串的next函数值,并由此画出KMP算法匹配的全过程。解:(由演示程序得知)nextval函数值为0
1 0 2 1 0 1 0 4
0
s=’ADBADABBAABADABBADADA’
pat=’ADABBADADA
3.
所以(1)可列表为:
6
1
2
4
6
(2)
8
3
3
5
4. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
1
12
(2)为4*5矩阵,非零元素有5个。
3
0
0
16
(2)
1.
Void string reverse(stringtype s, stringtype &r)
{
五、算法设计题
1. 编写递归算法,计算二叉树中叶子结点的数目。
法一:核心部分为:
DLR(liuyu
*root)
{ if (root!=NULL)
}
3. 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计赫夫曼编码。使用0~7的二进制表示形式是另一种编码方
案。对于上述实例,比较两种方案的优缺点。
解:方案1;哈夫曼编码
先将概率放大100倍,以方便构造哈夫曼树。
0
19
0 0
7
0 2 |
(40)
19
(17)
方案比较:
|
|
方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61
方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
结论:哈夫曼编码优于等长二进制编码
三、分析求解题
1. 已知如图所示的有向图,请给出该图的:
(1)
|
(2)
(3)
(4)
2. 请对下图的无向带权图:
(1)
(2)
解:设起点为a。可以直接由原始图画出最小生成树,而且最小生成树只有一种(类)!
邻接矩阵为:
最小生成树
3. 已知二维数组表示的图的邻接矩阵如下图所示。试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。
4.
试利用Dijkstra算法求图中从顶点a到其他各顶点间的最短路径,写出
5.给定下列网G:
(1)试着找出网G的最小生成树,画出其逻辑结构图;
(2)用两种不同的表示法画出网G的存储结构图;
(3)用C语言(或其他算法语言)定义其中一种表示法(存储结构)的数据类型。
A
E————F |
(2)可用邻接矩阵和邻接表来描述:
描述存储结构的数据类型可参见教材或电子教案: 注:用两个数组分别存储顶点表和邻接矩阵 #define INFINITY #define
MAX_VERTEX_NUM Typedef Typedef
VRType }ArcCell, AdjMatrix [ MAX_VERTEX_NUM ] [MAX_VERTEX_NUM ]; Typedef
struct{ VertexType vexs [MAX_VERTEX_NUM ]
; AdjMatrix
arcs; Int GraphKind
kind; }Mgraph; |
邻接表为:
a |
→ |
b |
12 |
→ |
e |
4 |
^ |
|
|
|
|
|
|
b |
→ |
a |
12 |
→ |
c |
20 |
→ |
e |
8 |
→ |
f |
9 |
^ |
c |
→ |
b |
20 |
→ |
d |
15 |
→ |
g |
12 |
^ |
|
|
|
d |
→ |
c |
15 |
→ |
g |
10 |
^ |
|
|
|
|
|
|
e |
→ |
a |
4 |
→ |
b |
8 |
→ |
f |
6 |
^ |
|
|
|
f |
→ |
b |
9 |
→ |
e |
6 |
^ |
|
|
|
|
|
|
g |
→ |
c |
12 |
→ |
d |
10 |
|
|
|
|
|
|
|
四、算法设计题
1. 编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。
解:Status Build_AdjList(ALGraph &G)
{
return OK;
}//Build_AdjList
2. 试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。
int visited[MAXSIZE]; //指示顶点是否在当前路径上
int exist_path_DFS(ALGraph G,int i,int j)//深度优先判断有向图G中顶点i到顶点j
是否有路径,是则返回1,否则返回0
{
visited[i]=1;
}//exist_path_DFS
9、填空题
1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是
2.
线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索
3.
假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为
解:显然,平均查找长度=O(log2n)<5次(25)。但具体是多少次,则不应当按照公式
全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74;
ASL=74/20=3.7
4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素
5.
在各种查找方法中,平均查找长度与结点个数n无关的查找方法是
6. 散列法存储的基本思想是由
7. 有一个表长为m的散列表,初始状态为空,现将n(n<m)个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。如果这n个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。(而任一元素查找次数 ≤n-1)
|
三、分析求解题
1. 对分(折半)查找适不适合链表结构的序列,为什么?用二分查找的查找速度必然比线性查找的速度快,这种说法对吗?
答:不适合!虽然有序的单链表的结点是按从小到大(或从大到小)顺序排列,但因其存储结构为单链表,查找结点时只能从头指针开始逐步搜索,故不能进行折半查找。
二分查找的速度在一般情况下是快些,但在特殊情况下未必快。例如所查数据位于首位时,则线性查找快;而二分查找则慢得多。
2.假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:
(1)
(2)
(3)
(4)
解:
(1)
30
5
3
(2) 查找元素54,需依次与30, 63, 42, 54 等元素比较;
(3) 查找元素90,需依次与30, 63,87, 95, 72等元素比较;
(4) 求ASL之前,需要统计每个元素的查找次数。判定树的前3层共查找1+2×2+4×3=17次;
但最后一层未满,不能用8×4,只能用5×4=20次,
所以ASL=1/12(17+20)=37/12≈3.08
3.
设哈希(Hash)表的地址范围为0~17,哈希函数为:H(K)=K
造出Hash表,试回答下列问题:
(1)
(2)
(3)
(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。
解: (1)画表如下:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
32 |
17 |
63 |
49 |
|
|
|
|
24 |
40 |
10 |
|
|
|
30 |
31 |
46 |
47 |
1 |
1 |
6 |
3 |
|
|
|
|
1 |
2 |
1 |
|
|
|
1 |
1 |
3 |
3 |
(2)查找63,首先要与H(63)=63=15号单元内容比较,即63 vs 31 ,no;
然后顺移,与46,47,32,17,63相比,一共比较了6次!
(3)查找60,首先要与H(60)=60=12号单元内容比较,但因为12号单元为空(应当有空标记),所以应当只比较这一次即可。
(4) 对于黑色数据元素,各比较1次;共6次;
对红色元素则各不相同,要统计移位的位数。“63”需要6次,“49”需要3次,“40”需要2次,“46”需要3次,“47”需要3次,
所以ASL=(1*6+2*1+3*3+6*1)/11=23/11
4.已知如下所示长度为12的表:
(Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec)
(1)
(2)
(3)
(4)
(5)
(6)
这样做您的博客会受到更多的关注: