天天看点

【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序

目录

一、绪论

二、线性表 

三、栈和队列

四、矩阵、串

五、树和二叉树

六、图

七、查找

八、排序

一、绪论

【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序
【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序
【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序

算法五大特性:

有穷性 确定性 可行性 输入 输出

好的算法应满足:

正确性 可读性 健壮性 效率与低存储需求 

时间复杂度取决于:

问题的规模  待处理数据的初态 

线性结构元素间存在 一对一 关系

树形结构元素间存在 一对多 关系

图形结构元素间存在 多对多 关系

数据结构三要素:

数据元素  逻辑结构  存储结构 

链式结构相比于顺序结构主要优点是:

插入、删除、合并等操作较方便

算法分析的目的 —— 分析算法的效率以求改进 
1、顺序存储方式只能用于存储线性结构。   (F) 

顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。

2、在一个长度为n的顺序表中,删除第i个元素(1≤i≤n)时需要移动( A )个元素。

A.n-i

B.n-i+1

C.n-i-1

D.i

代值法  假设长度为3的表 删除第二个元素 也就是需要移动最后一个元素 就是1

则n-i=3-2=1 所以答案是A 

二、线性表 

1、一个线性表的第一个元素地址是100,每个元素长度为2,则第5个元素地址(B)

A.110   B.108   C.100   D.120

(5-1)×2+100=108

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

A.64   B.63   C.63.5   D.7 

在表头插入元素 移动127个元素

……

在表尾插入元素 移动0个元素

(127+126+……+1+0)/ 128=63.5

3、线性表可以是空表
4、 语句p=p->next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值 (F)

不是数据域值是指针域 

5、顺序表中逻辑相邻的元素物理位置(一定)相邻,单链表中逻辑上相邻的元素物理位置(不一定)相邻。  
6、线性表L=(a1, a2, ... , an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是 (n-1)/ 2

 删除第一个元素需要移动n-1

……

删除最后一个元素需要移动0

(n-1+0)×n/2×1/n=(n-1)/2

7、对于一个具有n(n≥1)个结点的单链表,插入一个尾结点的时间复杂度是 O(n)

8、在结点个数大于1的循环单链表中,指针p指向其中某个结点,当执行以下程序段后让指针s指向结点p的前驱结点,请填空。

s = p;

while(s->next!=p)   s=s->next; 

9、等概率情况下,在表长为n的顺序表中插入一个元素所需移动的元素平均个数为(n/2) 

插入第一个位置 移动n个元素

……

插入最后一个位置 移动0个元素

(n+0)×(n+1)/ 2 × 1 / n+1 =n/2 

10、在一个长度为n的顺序表中,向第i个元素(1≤i≤n+1)位置插入一个新元素时需要从后向前移动多少个元素  n-i+1

假设n=2 在第1个元素前插入 已知需要移动2个 代值法得 n-i+1 

11、已知头指针 

h

 指向一个带头结点的非空单循环链表,结点结构为 

data | next

,其中 

next

 是指向直接后继结点的指针,

p

 是尾指针,

q

 是临时指针。现要删除该链表的第一个元素,正确的语句序列是:  D

A.

h->next=h->next->next; q=h->next; free(q);

B.

q=h->next; h->next=h->next->next; free(q);

C.

q=h->next; h->next=q->next; if (p!=q) p=h; free(q);

D.

q=h->next; h->next=q->next; if (p==q) p=h; free(q);

【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序

12、在双链表中,将 s 所指新结点插入到 p 所指结点之后,其语句应该为 ▁▁C▁▁ 。

A.p->next = s; s->prev = p; s->next = p->next; p->next->prev = s;

B.s->next = p->next; s->prev = p; p->next = s; p->next->prev = s;

C.s->next = p->next; p->next->prev = s; p->next = s; s->prev = p;

D.p->next = s; s->prev = p; p->next->prev = s; s->next = p->next;

三、栈和队列

1、表达式a*(b+c)-d的后缀表达式
【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序
2、递归函数转换为非递归函数时,通常借助( 栈 )数据结构

3、栈在( D )中有所应用

A.递归调用

B.函数调用

C.表达式求值

D.前三个选项都有

4、循环队列的引入,目的是为了克服 假溢出问题
5、设循环队列的元素存放在一维数组Q[0..29](下标为0到29)中,队列非空时,front指示队头元素位置,rear指示队尾元素的后一个位置。如果队列中元素的个数为11,front的值为25,则rear的值是( 6 ) 

 (Q.rear-Q.front+MAXSIZE)%MAXSIZE=队列长度

(x-25+30)%30 = 11 ,即x-25+30=11 ,则x=6.

6、栈是( C )。

A.顺序存储的线性结构

B.链式存储的非线性结构

C.限制存取点的线性结构

D.限制存储点的非线性结构

7、下列关于栈的叙述中,错误的是:        C
  1. 采用非递归方式重写递归程序时必须使用栈
  2. 函数调用时,系统要用栈保存必要的信息
  3. 只要确定了入栈次序,即可确定出栈次序
  4. 栈是一种受限的线性表,允许在其两端进行操作

A.仅 1

B.仅 1、2、3

C.仅 1、3、4

D.仅 2、3、4

I. 尾递归可以直接使用循环

8、若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除三个元素,再加入三个元素后,front和rear的值分别为多少?  B

A.3和5

B.3和1

C.3和3

D.3和6

四、矩阵、串

1、矩阵压缩存储的对象包括 对称矩阵  稀疏矩阵  上下三角矩阵

五、树和二叉树

1、二叉树按某种顺序线索化后,任一结点均有指向其前驱和后继的线索  (F)

第一个结点无前驱,最后一个结点无后继,另外,对于线索二叉树,左子树存在,则lchild指向左子树,否则指向前驱,右子树存在,则rchild指向右子树,否则指向后继。 

2、设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为( B)。

(A)2h (B)2h-1(C)2h+1(D)h+1

只有度为0和2两种情况,即每个结点要么没有子节点,要么有两个子节点(概念)。

除了根节点,每层至少两个结点,共h层,应有2(h-1)+1(除根节点外每层都有2个,最后加上1个根节点),化简得2h-1个,选B

3、如果T2是由有序树T转换而来的二叉树,那么T中结点的前序就是T2中结点的( A )

(A)前序(B)中序(C)后序(D)层次序

4、二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法( B )

(A)正确(B)错误(C)不同情况下答案不确定

 二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左子树的值、小于其右子树的值。

 5、任意一棵二叉树的叶结点在先序、中序和后序遍历中的相对次序( A )

(A)不发生改变(B)发生改变(C)不能确定(D)以上都不对

前中后序遍历改变的是根的访问顺序 不是叶结点的访问顺序

6、对一个满二叉树,m个树叶,n个结点,深度为h,则( D )

(A)n=h+m (B)h+m=2n(C)m=h-1(D)n=2^h-1

【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序
7、 具有5层结点的二叉平衡树至少( 12 )个结点
【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序
8、一棵含有n个结点的k叉树,可能达到的最大深度和最小深度各是多少? 

最大深度为n个节点的单支树,深度为n;

最小深度为完全k叉树。 

9、如果含有n个顶点的图形成一个环,则它有( n )棵生成树。

n个顶点成环有n条边 任意删除一条边都能生成1棵生成树 因此能生成n棵生成树  

10、对一棵二叉排序树采用 中序遍历 可以得到升序序列

六、图

1、采用邻接表存储图的深度优先遍历算法类似于二叉树的先序遍历

因为图的深度优先遍历算法先访问所在结点,再访问它的邻接点。与二叉树的先序遍历先访问子树的根结点,再访问它的孩子结点(邻接点)类似

2、采用邻接表存储图的广度优先遍历算法类似于二叉树的按层遍历 

3、判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用( D ).

(A)求关键路径的方法(B)求最短路径的Dijkstm方法

(C)宽度优先遍历算法(D)深度优先遍历算法

4、如果从一无向图的任意顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是

强连通图

5、任何一个无向连通网的最小生成树( A )。

A 有一棵或多棵

B 只有1棵

C 一定有多棵

D 可能不存在

无向连通图肯定有最小生成树

6、下面正确的说法是( BCD )。

A 任何一个关键活动提前完成,将使整个工程提前完成

B 关键活动不按期完成就会影响整个工程的完成时间

C 所有关键活动都提前完成,则整个工程提前完成

D 某些关键活动若提前完成,将使整个工程提前完成

7、任何一个有向图都一定存在拓扑序列。  F

任何一个有向无环图都至少有一个拓扑序列

8、求稀疏图的最小生成树,用克鲁斯卡尔算法来求解较好。  T

克鲁斯卡尔算法适合边少的,也即稀疏图

9、关键路径上的活动都是关键活动,它们是否按时完成会影响工期  T
10、稠密图采用邻接矩阵存储较省空间  T 

稠密图——邻接矩阵   稀疏图——邻接表

11、若一个无向图的以顶点V1为起点进行深度优先遍历,所得的遍历序列唯一,则可以唯一确定该图。   T

12、有向图的邻接表,每个顶点的边链表中的结点数等于该顶点的(  )

A、度数     B、入度     C、出度     D、边数

13、借助排序可以判断工程能否顺利开展,进行求解可以计算工程所需的最短工期,最短工期等于从源点到汇点的最长路径长度

七、查找

1、有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为( B )

(A)35/12(B)37/12(C)39/12(D)43/12

【期末复习记录】数据结构(更新到查找)一、绪论二、线性表 三、栈和队列四、矩阵、串五、树和二叉树六、图七、查找八、排序

八、排序

1、在所有排序方法中,关键字比较的次数与记录得初始排列次序无关的是( D )

(A)希尔排序 (B)起泡排序 (C)插入排序 (D)选择排序