华南理工大学2018数据结构第一次作业

1 判断题

(√)1. 数据的逻辑结构与数据元素本身的内容和形式无关。 (×)2. 线性表的逻辑顺序与物理顺序总是一致的。

(√)3. 若有一个叶子结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点。

(×)4. 对于同一组待输入的关键码集合,虽然各关键码的输入次序不同,但得到的二叉搜索树都是相同的。

(√)5. 最优二叉搜索树的任何子树都是最优二叉搜索树。

(√)6. 在二叉搜索树上插入新结点时,不必移动其它结点,仅需改动某个结点的指针,使它由空变为非空即可。

(√)7. 有n(n≥1)个顶点的有向强连通图最少有n条边。 (×)8. 连通分量是无向图中的极小连通子图。 (×)9. 二叉树中任何一个结点的度都是2。

(×)10. 单链表从任何一个结点出发,都能访问到所有结点。

二、单选题

1 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动( B )个元素。

A.8 B. 63.5 C. 63 D. 7 2 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,则A[3][3]在( A )位置,(10)表明用10进数表示。

A.692(10) B. 626(10) C. 709(10) D. 724(10) 3 N个顶点的连通图至少有( A )条边。

A.N-1 B. N C. N+1 D. 0 4 下面程序的时间复杂度为( C )。 for(int i=0; i

22

A.O(m) B. O(n) C. O(m*n) D. O(m+n)

5 设单链表中结点的结构为(data, link)。 已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作( B )。

A.s->link=p->link; p->link =s; B. q->link=s; s->link =p;

C. p->link=s->link; s->link =q; D. p->link=s; s->link =q; 6 栈的插入和删除操作在( A )进行。

A.栈顶 B. 栈底 C. 任意位置 D. 指定位置 7 若让元素1,2,3依次进栈,则出栈次序不可能出现哪种情况( C )。

A.3,2,1 B. 2,1,3 C. 3,1,2 D. 1,3,2 8 广义表A(a),则表尾为( C )。

A.a B. (()) C. 空表 D. (a)

1

9 采用邻接表存储的图的深度优先遍历算法类似于二叉树的( B )。

A.中序遍历 B. 前序遍历 C. 后序遍历 D. 按层次遍历

10 每次从无序表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做( B )排序。

A.插入 B. 选择 C. 交换 D. 外排序

三、填空题

1. 算法是一个有穷的指令集,它为解决某一特定任务规定了一个运算序列。它应具有输入、输

出、确定性、有穷性和可执行性等特性。

2. 当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的时间复杂度。 3. 在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个数是2。 4. 当用长度为n的数组顺序存储一个栈时,若用top==n表示栈空,则表示栈满的条件为top==0。 5. 对序列(49,38,65,97,76,27,13,50)采用快速排序法进行排序,以序列的第一个元素为基准

元素得到的划分结果是[13 27 38]45[50 65 76 97]。

6. 对于一棵具有n个结点的树,该树中所有结点的度数之和为n-1。

7. 请指出在顺序表{5、11、23、35、51、64、72、85、88、90、98}中,用折半查找关键码30

需做5次关键码比较。

8. 若线性表采用顺序存储结构,每个元素占用4个存储单元,第一个元素的存储地址为100,则

第12个元素的存储地址是144。

9. 在一个长度为n 的顺序表中,向第i个元素(1≤ i≤ n+1)之前插入一个新元素时,需要

向后移动n-i+1个元素。

10. 设有两个串p和q,求q在p中首次出现的位置的运算称作模式匹配。

四、程序阅读填空

1. 在顺序表中第 i 个位置插入新元素 x

template int SeqList::Insert (Type & x, int i){ if (i<0||i>last+1||last==MaxSize-1) return 0; //插入不成功 else {

last++; for(int j=last;j>i;j--) data[j]=data[j-1];

data[i] = x; return 1; //插入成功 } }

2

2. 直接选择排序的算法

template void SelectSort(datalist & list) { for(int i=0; i

template viod SelectExchange(datalist & list, const int i){

int k = i;

for(int j=i+1;j< list.CurrentSize;j++)

if(list.Vector[j].getKey()

_ k=j ;//当前具有最小关键码的对象

if(k!=i) Swap(list.Vector[i], list.Vector[k]); //交换 }

五、简答题

1. 线性表可用顺序表或是链表存储,此两种存储表示各有哪些优缺点?

答:顺序存储表示是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。它的存储效率高,存取速度快。但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。

链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。

2. 设有一个输入数据的序列是{46,25,78, 62, 12, 37, 70, 29},试画出从空树起,逐个输入

各个数据而生成的二叉搜索树。

答: 46

/ \\ 25 78 / \\ / 12 37 62 / \\ 29 70

3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4