《数据结构》复习题题库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、单项选择题(本大题共71小题,每小题2分,共142分)
1、一个对象序列的排序码为{46,79,56,38,40,84},采用快速排序以位于最左位置的对象为基准而得到的第一次划分结果为()。
()
A.{38,46,79,56,40,84}
B.{38,79,56,46,40,84}
C.{40,38,46,56,79,84}
D.{38,46,56,79,40,84}
标准答案:C
2、广义表((a),a)的表头是()。
()
A.a
B.b
C.(a)
D.((a))
标准答案:C
3、数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是()。
()A.80
B.100
C.240
D.270
标准答案:C
4、在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()。
()
A.HL=p;p->next=HL;
B.p->next=HL;HL=p;
C.p->next=HL;p=HL;
D.p->next=HL->next;HL->next=p;
标准答案:B
5、一个具有n个顶点的无向完全图的边数为()。
()
A.(n+1)/2
B.n(n-1)/2
C.n(n-1)
D.n(n+1)
标准答案:B
6、如果待排序序列中两个数据元素具有相同的值,在排序后它们的位置发生颠倒,则称该排序是不稳定的。
下列选项中,()就是不稳定的排序方法。
()A.起泡排序
B.归并排序
C.直接插入法排序
D.简单选择排序
标准答案:D
7、按照二叉树的定义,具有3个结点的二叉树有()种。
()
A.3
B.4
C.5
D.6
标准答案:C
8、设有1000个元素,用二分法查找时,最大比较次数是()。
()
A.1
B.7
C.10
D.25
标准答案:C
9、树适合用来表示()。
()
A.有序数据元素
B.无序数据元素
C.元素之间具有分支层次关系的数据
D.元素之间无联系的数据
标准答案:C
10、设有两个串p和q,求p在q中首次出现的位置的运算称作()。
()
A.连接
B.模式匹配
C.求子串
D.求串长
标准答案:B
11、将含100个结点的完全二叉树从根这一层开始,每层上从左到右依次对结点编号,根结点的编号为1。
编号为49的结点X的双亲编号为()。
()
A.23
B.24
C.25
D.无法确定
标准答案:B
12、串的长度是()。
()
A.串中不同字符的个数
B.串中不同字母的个数
C.串中所含字符的个数且字符个数大于0
D.串中所含字符的个数
标准答案:D
13、已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是()。
()
A.acbed
B.decab
C.deabc
D.cedba
标准答案:D
14、顺序表中逻辑上相邻的节点其物理位置也()。
()
A.一定相邻
B.不必相邻
C.按某种规律排列
D.无要求
标准答案:A
15、数据结构是研究数据的()以及它们之间的相互关系。
()
A.理想结构,物理结构
B.理想结构,抽象结构
C.物理结构,逻辑结构
D.抽象结构,逻辑结构
标准答案:C
16、由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为()。
()
A.24
B.48
C.53
D.72
标准答案:C
17、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
()
A.空或只有一个结点
B.高度等于其结点数
C.任一结点无左孩子
D.任一结点无右孩子
标准答案:B
18、下列排序算法中,()排序在每趟结束后不一定能选出一个元素放到其排好序的最终位置上。
()
A.选择
B.冒泡
C.归并
D.堆
标准答案:C
19、广义表(a,b,c,d)的表尾是()。
()
A.a
B.b
C.(a,b)
D.(b,c,d)
标准答案:D
20、具有65个结点的完全二叉树其深度为()。
()
A.8
B.7
C.6
D.5
标准答案:B
21、在内部排序中,排序时不稳定的有()。
()
A.插入排序
B.冒泡排序
C.快速排序
D.归并排序
标准答案:C
22、向堆中插入一个元素的时间复杂度为()。
()
A.O(log2n)
B.O(n)
C.O(1)
D.O(nlog2n)
标准答案:A
23、在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行()。
()
A.q->next=p->next;p->next=q;
B.p->next=q->next;q=p;
C.q->next=p->next;p->next=q;
D.p->next=q->next;q->next=p;
标准答案:D
24、线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
()
A.必须是连续的
B.部分地址必须是连续的
C.一定不是连续的
D.连续不连续都可以
标准答案:D
25、设有向图有n个顶点和e条边,采用领接表作为其存储表示,在进行拓扑排序时,总的计算时间为()。
()
A.O(nlog2e)
B.O(n+e)
C.O(ne)
D.O(n2)
标准答案:B
26、队列操作的原则是()。
()
A.先进先出
B.后进先出
C.只能进行插入
D.只能进行删除
标准答案:A
27、在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的()。
()
A.行号
B.列号
C.元素值
D.地址
标准答案:A
28、线性链表不具有的特点是()。
()
A.随机访问
B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素
D.所需空间与线性表长度成正比
标准答案:A
29、组成数据结构的基本单位是()。
()
A.数据项
B.数据类型
C.数据元素
D.数据变量
标准答案:C
30、设循环队列Q[1..N-1]的头尾指针为F,R,当插入元素时尾指针R加1,头指针F总是指在队列中第一个元素的前一个位置,则队列中元素计数为()。
()A.R-F
B.N-(R-F)
C.(R-F+N)%N
D.(F-R+N)%N
标准答案:C
31、在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
()
A.3
B.2
C.1
D.1/2
标准答案:B
32、若线性表最常用的操作是存取第i个元素及其前趋的值,则采用()存储方式节省时间。
()
A.单链表
B.双链表
C.单循环链表
D.顺序表
标准答案:D
33、若待排序对象序列在排序前已按其排序码递增顺序排序,则采用()方法比较次数最少。
()
A.直接插入排序
B.快速排序
C.归并排序
D.直接选择排序
标准答案:A
34、下面程序段的时间复杂度为()。
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
a[i][j]=i*j;()
A.O(m2)
B.O(n2)
C.O(m*n)
D.O(m+n)
标准答案:C
35、在一个单链表中,若q所指结点是p所指结点的前驱结点,若在q与p之间插入一个s所指的结点,则执行()。
()
A.s→link=p→link;p→link=s;
B.p→link=s;s→link=q;
C.p→link=s→link;s→link=p;
D.q→link=s;s→link =p;
标准答案:D
36、算法分析的两个主要方面是()。
()
A.空间复杂度和时间复杂度
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
标准答案:A
37、在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次前移()个元素。
()
A.n-i
B.n-i+1
C.n-i-1
D.i
标准答案:A
38、如果结点A有3个兄弟,而且B为A的双亲,则B的度为()。
()
A.1
B.3
C.4
D.5
标准答案:A
39、设有两个串(S1和S2),求S1在S2中首次出现的位置的运算称为()。
()
A.连接
B.模式匹配
C.求子串
D.求串长
标准答案:B
40、下面算法的时间复杂度为()。
int f( unsigned int n )
{
if ( n==0 || n==1 ) return 1;
else return n*f(n-1);
}()
A.O(1)
B.O(n)
C.O(n2)
D.O(n!)
标准答案:B
41、每一个存储节点只含有一个数据元素,数据元素按散列函数确定存储位置的存储方式是()。
()
A.顺序存储
B.链式存储
C.索引存储
D.散列存储
标准答案:D
42、具有2000个节点的二叉树,其高度至少为()。
()
A.9
B.10
C.11
D.12
标准答案:C
43、算法分析的目的是()。
()
A.找出数据结构的合理性
B.研究算法中的输入和输出的关系
C.分析算法的效率以求改进
D.分析算法的易读性和文档性
标准答案:C
44、判定一个顺序栈(最多元素为m个)为空的条件是()。
()
A.top==0
B.top==m
C.top!=0
D.top!=m
标准答案:A
45、若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。
()
A.3,2,1
B.2,1,3
C.3,1,2
D.1,3,2
标准答案:C
46、当利用大小为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则向这个栈插入一个元素时,首先应执行()语句修改top指针。
()
A.top++
B.top--
C.top=0
D.top
标准答案:B
47、在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移()个元素。
()
A.n-i
B.n-i+1
C.n-i-1
D.i
标准答案:B
48、设字符串S1='ABCDEFG',S2='PQRST',则运算S=CONCA T(SUB(S1,2,LENGTH (S2)),SUB(S1,LENGTH(S2),2))后结果为()。
()A.BCQR'
B.'BCDEF'
C.'BCDEFG'
D.'BCDEFEF'
标准答案:D
49、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主的存储,a11为第一个元素,其存储地址为1,每个元素占1个地址空间,则a85的地址为()。
()A.13
B.18
C.33
D.40
标准答案:C
50、线性表的链接实现有利于()运算。
()
A.插入
B.读表元
C.查找
D.定位
标准答案:A
51、设有广义表D(a,b,D),其深度为()。
()
A.∞
B.3
C.2
D.5
标准答案:A
52、串的逻辑结构与()的逻辑结构不同。
()
A.线性表
B.栈
C.队列
D.树
标准答案:D
53、下列那种排序需要的附加存储开销最大()。
()
A.快速排序
B.堆排序
C.归并排序
D.插入排序
标准答案:C
54、设一数列的顺序为1,2,3,4,5,6,通过栈结构不可能排成的顺序数列为()。
()
A.3,2,5,6,4,1
B.1,5,4,6,2,3
C.2,4,3,5,1,6
D.4,5,3,6,2,1
标准答案:B
55、栈的插入和删除操作在()进行。
()
A.栈顶
B.栈底
C.任意位置
D.指定位置
标准答案:A
56、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
()
A.空或只有一个结点
B.高度等于其结点数
C.任一结点无左孩子
D.任一结点无右孩子
标准答案:B
57、在用邻接表表示图的情况下,建立图的算法的时间复杂度是()。
()
A.O(n+e)
B.O(n2)
C.O(n×e)
D.O(n3)
标准答案:A
58、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是()。
()
A.edcba
B.decba
C.abcde
D.dceab
标准答案:D
59、线性表采用链式存储时,其地址()。
()
A.必须是连续的
B.部分地址必须是连续的
C.一定是不连续的
D.连续与否均可以
标准答案:D
60、二叉树第i层上至多有()结点。
()
A.2i
B.2i
C.2i-1
D.2i-1
标准答案:C
61、在一个循环顺序队列中,队首指针指向队首元素的()位置。
()
A.前一个
B.后一个
C.当前
D.后面
标准答案:A
62、如果以链表作为栈的存储结构,则退栈操作时()。
()
A.必须判别栈是否满
B.对栈不作任何判别
C.必须判别栈是否空
D.判别栈元素的类型
标准答案:C
63、组成数据结构的基本单位是()。
()
A.数据项
B.数据类型
C.数据元素
D.数据变量
标准答案:C
64、设单链表中指针p指着结点A,若要删除A之后的结点(若存在),则需要修改指针操作为()。
()
A.p->next=p->next->next
B.p=p->next
C.p=p->next->next
D.p->next=p
标准答案:A
65、栈的插入与删除操作在()进行。
()
A.栈顶
B.栈底
C.任意位置
D.指定位置
标准答案:A
66、广义表((a)),其表头是()。
()
A.a
B.(a)
C.()
D.((a))
标准答案:B
67、线索化二叉树中某结点D,没有左孩子的主要条件是()。
()
A.D->Lchild=Null
B.D->ltag=1
C.D->Rchild=Null
D.D->ltag=0
标准答案:B
68、在有n个叶子结点的哈夫曼树中,其结点总数为()。
()
A.不确定
B.2n
C.2n+1
D.2n-1
标准答案:D
69、从一个循环顺序队列删除元素时,首先需要()。
()
A.前移一位队首指针
B.后移一位队首指针
C.取出队首指针所指位置上的元素
D.取出队尾指针所指位置上的元素
标准答案:B
70、Substr('DATA STRUCTURE',5,9)=()。
()
A.STRUCTURE'
B.'ASTUCTUR'
C.'DATA STRUCTRUE'
标准答案:A
71、二分查找要求被查找的表是()。
()
A.键值有序的链接表
B.链接表但键值不一定有序
C.键值有序的顺序表
D.顺序表但键值不一定有序
标准答案:C
二、填空题(本大题共48小题,每小题2分,共96分)
72、数据的存储结构被分为顺序结构、链接结构、___、散列结构四种。
标准答案:索引结构
73、数据的存储结构被分为顺序结构、链接结构、索引结构、___四种。
标准答案:散列结构
74、在双向链表中每个结点包含有两个指针域,一个指向其___结点,另一个指向其___结点。
标准答案:前驱;后继
75、在一个图中,所有顶点的度数之和等于所有边数的___倍。
标准答案:2
76、对于一棵具有n个结点的树,该树中所有结点的度数之和为___。
标准答案:n-1
77、假定一棵树的广义表表示为A(B(C(D,E),F,G(H,I,J)),K),则度为3的结点数为___个。
标准答案:2
78、一个算法应具备的5个特性为___、确定性、可行性、输入、输出。
标准答案:有穷性
79、一个算法应具备的5个特性为有穷性、___、可行性、输入、输出。
标准答案:确定性
80、以二分查找方法从长度为12的有序表中查找一个元素时,平均查找长度为___。
标准答案:37/12
81、对于线性表(18,25,63,50,42,32,90)进行散列存储时,若选用H(K)=K % 9作为散列函数,则散列地址为0的元素有___个,散列地址为5的元素有___个。
标准答案:3;2
82、数据的存储结构被分为顺序结构、___、索引结构、散列结构四种。
标准答案:链接结构
83、对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵大小为___。
标准答案:n*n
84、在双向循环链表中,在指针p所指的结点之后插入指针f所指的结点,其操作为___。
标准答案:(1)f->next=p->next;
(2)p->next->prior=f;
(3)f->prior=p;
(4)p->next=f;
85、对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为___,在表尾插入元素的时间复杂度为___。
标准答案:O(n);O(1)
86、中缀表达示3+X*(2.4/5-6)所对应的后缀表达示为___。
标准答案:3 x 2.4 5 /6 -*+
87、假定一棵树的广义表表示为A(B(C(D,E),F,G(H,I,J)),K),则度为0的结点数为___个。
标准答案:7
88、对于线性表(18,25,63,50,41,32,90,66)进行散列存储时,若选用H(K)=K%11作为散列函数,则散列地址为3的元素有___个,散列地址为8的元素有___个。
标准答案:1;2
89、中缀算术表达式3+4/(25-(6+15))*8 所对应的后缀算术表达式为___。
标准答案:3 4 25 6 15 + - / 8 * +
90、快速排序在平均情况下的时间复杂度为___,在最坏情况下的时间复杂度为___。
标准答案:O(nlog2n);O(n2)
91、前序序列和中序序列相同的二叉树为___。
标准答案:单右枝二叉树或孤立结点
92、每次从无序表中顺序取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做___排序。
标准答案:插入
93、一个n*n的对称矩阵,如果以行或列为主序存入内存,则其容量为___。
标准答案:n(n+1)/2
94、后缀表达式“2 10 + 5 * 6 –9 / ”的值为___。
标准答案:6
95、对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为___,右孩子结点的编号为___。
标准答案:2i;2i+1
96、假定一棵二叉树的结点数为18,则它的最小深度为___,最大深度为___。
标准答案:5;18
97、从一个栈删除元素时,首先取出___。
标准答案:栈顶元素
98、在线性表的___存储中,对每一个元素只能采用顺序查找。
标准答案:链接
99、一棵深度为5的满二叉树中的结点数为___个。
标准答案:31
100、一个算法应具备的5个特性为有穷性、确定性、___、输入、输出。
标准答案:可行性
101、在线性表的单链接存储结构中,每个结点包含有两个域,一个叫___域,另一个叫___域。
标准答案:元素值;指针
102、当从一个小根堆中删除一个元素时,需要把堆尾元素填补到___位置,然后再按条件把它逐层___调整。
标准答案:堆顶;向下
103、假定一棵树的广义表表示为A(B(C(D,E),F,G(H,I,J)),K),则度为2的结点数为___个。
标准答案:2
104、从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为___和___。
标准答案:1;3
105、在散列表(Hash)查找中,评判一个散列函数优劣的两个主要条件是:___和___。
标准答案:值均匀分布于表空间以减少冲突;函数尽可能简单以方便计算
106、后缀算术表达式24 8 + 3 * 4 10 7 - * / 所对应的中缀算术表达式为___,其值为___。
标准答案:(24+8)*3/(4*(10-7)) ;8
107、在一个单链表HL 中,若要向表头插入一个由指针p指向的结点,则应执行语句:___。
标准答案:p->next=HL;HL=p;
108、假定一组记录的排序码为(46,79,56,38,40,80,25,34),在对其进行快速排序的过程中,进行第一次划分后得到的排序码序列为___。
标准答案:(40,34,25,38,46,80,56,79)
109、对于线性表(18,25,63,50,41,32,90,66)进行散列存储时,若选用H(K)=K%11作为散列函数,则散列地址为0的元素有___个散列地址为8的元素有___个。
标准答案:1;2
110、若对一棵二叉树的结点编号从0开始顺序编码,按顺序存储,把编号为0的结点存储到a[0]中,其余类推,则a[i]元素的左孩子元素为___,右孩子元素为___。
标准答案:2i+1;2i+2
111、在一个具有n个顶点的无向完全图中,包含有___条边,在一个具有n个顶点的有向完全图中,包含有___条边。
标准答案:n(n-1)/2;n(n-1)
112、在一棵高度为h的3叉树中,最多含有___结点。
标准答案:(3h-1)/2
113、对于一个顺序实现的共享栈S[1…n],栈顶指针分别为top1和top2,top1由小到大,top2由大到小,其判断下溢的条件是___;判断上溢的条件是___。
标准答案:top1=0或top2=n+1;top1+1=top2
114、在循环双向链表中表头结点的左指针域指向___结点,最后一个结点的右指针域指向___结点。
标准答案:表尾;表头
115、每次从无序表中挑选出一个最大或最小元素,把它交换到有序表中的一端,此种排序方法叫做___排序。
标准答案:选择
116、对于一个以顺序实现的循环队列Q[0...m-1],队头、队尾指针分别为f,r,其判空的条件是___,判满的条件是___。
标准答案:r=f;(r+1)%m=f
117、假定一棵树的广义表表示为A(B(C(D,E),F,G(H,I,J)),K),则度为1的结点数为___个。
标准答案:0
118、在一棵树中,___没有前驱结点。
标准答案:树概结点
119、以二分查找方法查找一个线性表时,此线性表必须是___存储的___表。
标准答案:顺序;有序
三、简答题(本大题共20小题,每小题10分,共200分)
120、已知一棵二叉树的中序遍历结果为DBHEAFICG,前序遍历结果为ABDEHCFIG,请画出该二叉树。
标准答案:
121、
(2.80)
标准答案:
122、对于结点类型为Lnode的单链表,以下算法的功能为:____________________________。
void BB( LNode *& HL)
{
LNode *p=HL;
HL=NULL;
while (p!=NULL)
{
LNode *q=p;
p=p->next;
q->next=HL;
HL=q;
}
}
标准答案:将一个单链表按逆序链接。
123、下面递归算法的功能是_____________________________。
void unknown(ListNode *f,Type &x)
{//指针f 是带表头结点的单链表的表头指针,数值x是给定值。
ListNode * temp;
if (f->link!=NULL)
{
while(f->linkàdata==x)
{
temp= f->link; f->link= temp->link ;delete temp;
}
unknown(f->link , x);
}
}
标准答案:在单链表中删除所有值为x的结点。
124、以下为向以BST为树根指针的二叉搜索树上插入值为item的结点的递归算法。
请在横线处将程序补充完整。
Void Insert(BtreeNode*&BST,const ElemType&item)
{
if(BST==NULL)
{ BTreeNode* p=new BTreeNode;
p->date=item;
______________________________;
BST=p;
}
else if(item<BST->date) ___________________________;
else______________________________;
}(2.80)
标准答案:p->left=p->right=NULL
Insert(BST->left,item)
Insert(BST->right,item)
125、设有顺序表中的元素依次为017,094,154,170,275,503,512,553,612,677,765,897,908。
试画出对其进行折半搜索时做性能分析用的扩充二叉搜索树(判定树),并计算搜索成功时的平均搜索长度(ASLsucc)和搜索不成功进的平均搜索长度(ASLunsucc)。
标准答案:
126、下列算法执行后得到的线性表La为:___。
void BB(List &La)
{
InitList(La);
int a[]={78,26,56,27,34,42};
for(i=0; i<3; i++)
InsertFront(La,a[i]);
for(i=3; i<6; i++)
InsertRear(La,a[i]);
TraverseList(La);
}
标准答案:(56,26,78,27,34,42)
127、以上算法的功能为:_________。
void BB(List &L)
{
int i=0;
while (i<L.size)
{
int j=i+1;
while (j<L.size)
{
if(L.list[j] = =L.list)
{
for (int k=j+1;k<L.size;k++)
L.list[k-1]=L.list[k];
L.size--;
}
else j++;
}
i++;
}
}
标准答案:删除线性表中所有重复的元素。
128、执行下面函数调用后得到的输出结果是_______________________________。
void AF(Queue & Q)
{
InitQueue(Q);
int a[4] = { 5,8,12,15 };
for ( int i=0; i<4; i++ )
QInsert(Q,a[i]);
QInsert(Q,QDelete(Q));
QInsert(Q,30);
QInsert(Q,QDelete(Q)+10);
while ( ! QueueEmpty(Q) )
cout<<QDelete(Q)<<' ';
}
标准答案:12 15 5 30 18
129、
标准答案:
130、对于结点类型为LNode的单链表,以下算法的功能为:_________。
void AA (LNode * HL,const ElemType & item)
{
LNode * newptr=new Lnode ;
newptr->data=item;
LNode *p=HL;
while ( p->next!=HL )
p=p->next;
newptr->next=HL;
p->next=newptr;
}
标准答案:向单链表的末尾添加一个元素。
131、
标准答案:(3,4)5,(0,1)8,(4,5)9,(4,7)10,(2,4)14,(1,3)15,(4,6)31
132、已知一棵二叉树的前序遍历的结果序列是ABECKFGHIJ,中序遍历的结果是EBCDAFHIGJ,试写出这棵二叉树的后序遍历结果。
标准答案:EDCBIHJGFA
133、以下算法用于实现“计算二叉数的的深度”。
请在空白处填写语句,将程序补充完整。
int BtreeDepth (BTreeNode *BT)
{
if (BT= =NULL)
return 0;
else
{
int dep1,dep2;
dep1=__________________________;
dep2=__________________________;
if (dep1>dep2)__________________________;
return___________________;
}
}
标准答案:BtreeDepth(BT->left)
BtreeDepth(BT->right)
return rep1+1
rep2+1
134、假定一个待散列存储的线性表为(37,65,25,73,42,91,45,36,18,75),散列地址空间为HT[12],若采用除留余数法构造散列函数和链接法处理冲突,试求出每一元素的散列地址,画出最后得到的散列表,求出平均查找长度。
标准答案:
135、假定调用以下算法时栈S 中已有2个元素(23,16),其中23是栈底。
则调用后得到的栈内容为(从栈底开始排列):_________________________
void CC( Stack &S)
{
Pop(S);
Push(S,50);
Push(S,45);
Peek(S);
}标准答案:23,50,45
136、对于结点类型为LNode的单链表,以下算法的功能为:_____________________________ int AA(LNode *HL , ElemType x)
{
int n=0;
LNode *p=HL;
while (p!=NULL)
{
if (p->data= =x) n++;
p=p->next;
}
return n;
}
标准答案:统计单链表中结点的值等于给定值x的结点数
137、以下算法的功能是_________________________,一般称之为_________________________算法。
void DD(ElemType A[],int n)
{
ElemType x;
int i,j,flag;
for(i=1;i<n-1;i++)
{
flag=0;
for(j=n-1;j>=i;j--)
if (A[j].stn<A[j-1].stn)
{
x=A[j];
A[j]=A[j-1];
A[j-1]=x;
flag=1;
}
if (flag==0) return;
}
}
标准答案:该算法的功能是:对数组A中的n个元素进行排序,称为起泡算法。
138、该算法的功能是:___________________________________。
int BB(ElemType A[], int n, KeyType K)
{
for (int i=0;i<n;i++)
if (A[i].key = =K) break;
if (i<n) return i;
else return –1;
}
标准答案:在具有n个元素的顺序表A中,顺序查找关键字为K 的元素
139、调用该算法后,输出结果为:
void DD ( )
{
ElemType A[ ]={1,3,5,7,9,2,4,6,8,10},B[10];
TwoMerge(A, B,0,4,9);
for ( int i=0; i<10; i++)
cout<<B[i]<<“”;
cout<<endl;
}
标准答案:1 2 3 4 5 6 7 8 9 10
四、编程题(本大题共4小题,每小题15分,共60分)
138、编写向类型为List的线性表L中第i个元素位置插入一个元素的算法,假定不需要对i的值进行有效性检查,同时不需要检查存储空间是否用完。
V oid Insert(List& L,int i, ElemType x)
标准答案:vioid Insert(List& L,int i,ElemType x) {
for(int j=L.size-1;j>=i-1;j--)
L.list[j+1]=L.list[j];
L.list[i-1]=x;
L.size++;
}
139、编写对二叉树进行中序遍历的非递归算法。
标准答案:void Inorder (BTreeNode *BT)
{
BtreeNode * s[10];
int top=-1;
BTreeNode *p=BT;
while (top !=-1|| p!=NULL)
{
while (p!=NULL)
{
top++;
s[top]=p;
p=p->left;
}
if (top!=-1)
{
p=s[top];
top--;
cout<<p->data<<’ ‘;
p=p->right;
}
}
}。