级本1数据结构期中试题参考答案
一、填空题(每空2分,共32分)
1.按照数据结构中元素逻辑关系的不同,我们将数据结构分成:线性和
非线性两大类。
2.在一个长度为n的顺序表中删除第pos(0<=pos<n)个位置上的元素,需移动的元素个数为< p="">
匪夷所思是什么意思
n-pos-1 。
3.Evaluate the postfix expression: 2 4 3 1 + * + , where each number reprents an operand and each symbol of + or * reprents an operator, plea give the result of the expression on the following line 18 。
4.设以下算法中所用到的栈和队列元素类型一致,类型名为StackQueue_entry,请问该算法的功能为: 栈S元素逆置___。
Error_code algo1(Stack &S)
{
StackQueue_entry item;
Queue Q;
while (!S.empty() { S.top(item); S.pop( );Q.append(item); }
while (!Q.empty() { Q.retrieve(item); Q.rve( );S.push(item); }
return success;
}
5.请在下列String类的构造函数中填空:
苏轼作文素材
String::String(List& in_list){
length=in_list.size();
entries=new char[length+1];
for (int i=0;i<length;i++)< p="">
ieve(i,entry[i]); ;
entries[length]= ‘\0’;
6.栈中元素的操作原则是LIFO ,在出栈算法中需要判断栈是否为空。
7.在线性表和数组这两个概念中,线性表是一个与是否在计算机中存储无关的逻辑概念。
茉莉花养殖8.对数据结构进行的抽象数据类型(ADT)定义包含两部分内容,分别是这种数据结构的逻辑结构定义以及基本操作集定义。
9.在hanoi塔问题中,若要将A塔座上的3个圆盘移动到C塔座上,其中B塔座作为中间的辅助塔座,则至少需要搬动的次数为7 。
10. 为了使链式存储的类在使用时不发生错误,我们要为它们配备析构函数、拷贝构造函数______________、_______赋值重载函数____等方法。
11. 在线性表改进的单链表实现方法中,我们定义了current指针和current_position分别指示最近访问过的结点的指针和位序号,请解释这样做的好处:不需要每次都从
头访问链表,在按顺序访问链表结点时效率得到提高。
12. 在用于查找的线性表中,线性表中存放了n条Record类型的记录,Record对象应满
足的要求是:每个Record对象都可以转换为key类型的对象,可以相互比较大小。
二、应用题(共48分)
1.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。(9分)
答:
线性表的链式存储结构能够克服上述三个弱点。其一,在作插入或删除操作时,不需移动
元素,当然,此时需要移动指针;其二,链式结构中的每个结点是动态申请的,只有在需要的时候才要求分配空间,也因此其三中表的容量是容易扩充的,只要系统堆空间有内存。
当然,由于链式表中指针域也占用空间,链式结构的空间效率也不一定优于顺序结构。
2. A ntinel, also called hedge, is an extra entry (are extra entries) which is (are) added to a data structure so that boundary conditions need not be treated as a special ca. Plea give an example of a ntinel, and analyze the advantages of using the ntinel. (7分)
答:
在顺序查找算法中,我们在原查找表的尾部添加一条关键字为target的记录,此时这个记录就是一个哨兵。
这样在顺序查找从前向后依次搜索的过程中,如果在原表中查找到target对应记录,即返回该记录的位序号;如果原表中没有对应记录,则也能在最后添加的记录位置处因关键字对
应相等而使循环停下来。所以,此时我们不再需要对是否达到链表尾部进行判别,
即for (position = 0; position < s; position++ ) {
中减少了positon<s的越界检查,变为:< p="">
for (position = 0; ; position++) {
从而提高了查找的时间效率。
东莞市中堂镇或:
Life game
加上头结点的链表的处理
3.简述循环队列中区分队空和队满的方法(至少给出3种方法)。(10分)
答:(1)少用一个空间的方法,即当为队列分配的空间还有1个空单元时,即认为队列已满。队空条件:(rear+1)%maxque==front
队满条件:(rear+2)%maxque==front
(2)设定标志位flag
队空条件:(rear+1)%maxque==front && flag==0
队满条件:(rear+1)%maxque==front && flag==1
(3)设队列元素计数器count
队空条件:count==0
队满条件:count == maxque
(4)采用特殊值方法
队空条件:rear==-1
队满条件:(rear+1)%maxque==front && rear!=-1
4.写出多项式类polynomial的定义方法,并简述polynomial类、extended_queue类、queue 类、term类、node类之间的关系。(10分)
告知函
class Polynomial: private Extended_queue {
public:
化学治疗void read( );
void print( ) const;
void equals_sum(Polynomial p, Polynomial q);
void equals_difference(Polynomial p, Polynomial q);
void equals_product(Polynomial p, Polynomial q);
Error_code equals_quotient(Polynomial p, Polynomial q);
int degree( ) const;
private:
void mult_term(Polynomial p, Term t);
};
Is_a relation:
polynomial 是一个extended_queue, extended_queue是一个queue,
Has_a relation:
Every Node has a Node_entry of type term.
The queue is combined with nodes.
5.在关键字序列依次为(7,12,15,18,27,32,41,92)的顺序表下进行识别相等的二分查找(采用binarySearch_2算法)。(12分)
(1)简述查找target=18时的查找过程。
(2)画出对这个长度为8的顺序表进行识别相等的二分查找时的比较树,并分别计算出成功查找与不成功查找时的平均比较次数。
(3)用大O 记号来表示二分查找的时间效率。 (1)职业打假公司
1 2 3 4 5 6 7 8 7
12
15
小学生书法
18
27
32
41
92
Find target=18: bottom=1,top=8 mid=4,
ve(mid,data) target==data ,即成功返回。 (2)
5731628F
F F
F
F
F
F
F
F 4
=
<<<<<<<>>>>>=
=
=
=
=
=
=
=
>>>成功查找:ASL=(1+2*3+4*5+1*7)/8=4.25 不成功查找:ASL=(7*6+2*8)/9=6.45