Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

严蔚敏《数据结构》冲刺串讲与模拟四套卷

第 1讲 线性结构

本讲主要内容要求
·数据结构基本概念
·线性表的链式和顺序存储
·限定性线性表—栈和队列
·串
·数组与广义表

一、数据结构基本概念

考点 重点与难点 考试中常见题型 复习思路与方法

(1)数据结构概念;
本章中的几个基本概念;
(2)抽象数据类型定义; 填 空 题、简 答
数据、数据对象、数据结构、数据类 1.熟记基本概念;
(3)逻辑结构; 题、问 答 题、计
型;算法及算法 描 述;算 法 的 时 间 2.熟练分析算法时间复杂度;
(4)存储结构; 算题
复杂度和空间复杂度分析
(5)算法的定义和评价;

1.数据结构的基本概念
·数据(Da
ta)
·数据元素(Da
taEl
eme
nt)
·数据对象(Da
taObj
ect

·数据结构(Da
taSt
ruc
tur
e)
·数据类型(Da
taTy
pe)
·数据抽象与抽象数据类型

2.算法 (Al
gor
it
hm)
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个
操作。
(1)算法的特性:
·有穷性
·确定性
·可行性
— 1—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

·输入
·输出
(2)算法设计的要求
·正确性
·可读性
·健壮性
·通用性
·效率与存储量需求
(3)“正确”分 4个层次:
·程序不含语法错误
·程序对于几组输入数据能够得出满足规格说明要求的结果;
·程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的
结果;
·程序对于一切合法的输入数据都能产生满足规格说明要求的结果。
通常以第 3层意义的正确性作为衡量一个程序是否合格的标准。
(4)算法分析应用举例
一般地,常用最深层循环内的语句中的原操作的执行频度(重复执行的次数)来表示。
表示时间复杂度的阶有:
O(1):常量时间阶     
O(n):线性时间阶
O(l
ogn):对数时间阶    
O(nl
ogn):线性对数时间阶
O(nk):k≥2,k次方时间阶

二、线性表的链式和顺序存储

考点 重点与难点 考试中常见题型 复习思路与方法

1.
掌握线性表特点及抽象数据
本章中的线性表的特点; 顺序 表 和 单 链 表 上 实 现
选 择 题、填 空 类型定义;
顺序定义及实 现、线 性 链 表、循 环 的各 种 基 本 操 作 及 相 关
题、算法设计题 2.熟 练 掌 握 顺 序 表 和 链 表 操
链表、双向链表 的时间性能分析
作;

顺序存储结构中,很容易实现线性表的一些操作:初始化、赋值、查找、修改、插入、删除、求长度
等。
单线性链式的基本操作
— 2—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

1.建立单链表
动态地建立单链表的常用方法有如下两种:头插入法,尾插入法。
(1)头插入法建表
每次插入的结点都作为链表的第一个结点。生成的链表中结点的次序和输入的顺序相反。
(2)尾插入法建表
尾插法是将新结点插入到当前链表的表尾,使其成为当前链表的尾结点。生成的次序和输入的
次序相同。

2.双向链表
双向链表(Do
ubl
eLi
nke
dLi
st
):指的是构成链表的每个结点中设立两个指针域:一个指向其直接
前趋的指针域 pr
ior
,一个指向其直接后继的指针域 ne
xt。这样形成的链表中有两个方向不同的链,故
称为双向链表。

三、限定性线性表—栈

考点 重点与难点 考试中常见题型 复习思路与方法

1.栈的基本操作
1.熟练掌握栈的工作原理
2.栈类的实现 填空题
栈的原理 2.
掌握栈的顺序和链式存储结
3.栈的应用和算法 选择题
递归工作原理 构下的基本操作
4.递归的概念 编程题
3.掌握栈与递归的关系
5.栈与递归

结点出栈:首先执行 t
op减 1,使 t
op指向栈顶元素的存储位置,然后将栈顶元素取出。

1.两栈共享技术(双端栈):
主要利用了栈“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一
维数组空间 S[M],将两个栈的栈底分别放在一维数组的两端,分别是 0,M-1。
共享栈的空间示意为:t
op[0]和 t
op[1]分别为两个栈顶指示器 。

— 3—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

2.栈的链式表示
栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。
因此,链栈没有必要像单链表那样附加头结点,栈顶指针 t
op就是链表的头指针。下图是栈的链式存
储表示形式。

链栈的结点类型说明如下:

ype
def
 st
ruc
t St
ack_No
de
  {El
emTy
pe  da
ta;
  s
tr
uctSt
ack_No
de ne
xt;
  }St
ack_No
de;

四、限定性线性表—队列

考点 重点与难点 考试中常见题型 复习思路与方法

1.熟练掌握队列的工作原理
1.队列的基本操作 填空题
2.
掌握队列的顺序和链式存储
2.队列的实现 队列的原理 选择题
结构下的基本操作
3.队列的应用和算法 编程题
3.掌握栈与递归的关系

1.循环队列
为充分利用向量空间,克服上述“假溢出”现象的方法是:将为队列分配的向量空间看成为一个首
尾相接的圆环,并称这种队列为循环队列(Ci
rcul
arQu
eue
)。
队列的链式存储表示
队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单
链表。
— 4—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点。

五、串

考点 重点与难点 考试中常见题型 复习思路与方法

串的概念、术语和基本操作和存储 熟练掌握串的概念、术语
填 空 题、选 择
结构 串的模式匹配算法 熟练掌握串的操作
题、编程题
串的模式匹配算法 掌握串的模式匹配思路

串的模式匹配算法
模式匹配(模范匹配):子串在主串中的定位称为模式匹配或串匹配(字符串匹配)。模式匹配成
功是指在主串 S中能够找到模式串 T,否则,称模式串 T在主串 S中不存在。

六、数组与广义表

考点 重点与难点 考试中常见题型 复习思路与方法

理解数组的定义、数组的顺序存储 数组 的 顺 序 存 储 和 压 缩 1.
掌握数组元素存储方式和下
选 择 题、填 空
结构及矩阵的存储压缩 存储计算; 标计算公式;
题、算法设计题
理解广义表的定义及存储结构 广义表长度和深度计算 2.熟练广义表操作;

以二维数组 Amn为例,假设每个元素只占一个存储单元,“以行为主”存放数组,下标从 1开始,首


元素 a
11的地址为 Lo
c[1,
1]求任意元素 a
i的地址 ,可由如下计算公式得到:

Lo
c[i
,j]=Lo
c[1,
1]+n×(i-1)+(j-1)
如果每个元素占 s
ize个存储单元 ,则任意元素 a
i的地址计算公式为:

Lo
c[i
,j]=Lo
c[1,
1] + (n×(i-1)+j-1)×s
ize
特殊矩阵的压缩存储
特殊矩阵压缩存储的压缩原则是:对有规律的元素和值相同的元素只分配一个存储单元,对于零
元素不分配空间。
三角矩阵(下三角矩阵、上三角矩阵和对称矩阵)和带状矩阵。
(1)稀疏矩阵的三元组表表示法
(2)稀疏矩阵的链式存储结构:十字链表
广义表(Li
st
s,又称为列表 ):是由 n(n! 0)个元素组成的有穷序列:LS=(a
1,a
2,…,a
n)其中 a

或者是原子项,或者是一个广义表。LS是广义表的名字,n为它的长度。若 a
i是广义表,则称为 LS的
子表。
(1)广义表的头尾链表存储结构
(2)广义表的同层节点链存储结构

七、小结

·线性结构分为线性表、栈、队列、串、数组和广义表。
·本讲主要对其类型定义和基本操作以及应用进行讲解。
— 5—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

第 2讲 非线性结构

数据结构中非线性结构主要分为树形和图形结构。本讲对这两部分内容进行复习总结。

一、树与二叉树

考点 重点与难点 考试中常见题型 复习思路与方法

1.树与二叉树的基本概念,
2.完全二叉树与满二叉树的 基 本
概念和性质
3.二叉树与树、树林之间的转换
4.二叉树的顺序存储结构与 二 叉
链表存储结构;
二叉 链 表 基 础 上 各 种 遍
5.二叉树 的 前 序 遍 历、中 序 遍 历、 熟练掌握树、二叉树基本概念,
历算法(重点为非递归算 填 空 题、选 择
后序遍历和按层次遍历,以及在二 掌握二叉树基本定理,遍历方
法)的设计与应用; 题、
叉链表基础上各种遍历算法(重点 式、哈夫曼树的构造和 WPL计
二叉树的线索化; 编程题、构造题
为非递归算法)的设计与应用 算以及哈夫曼编码
哈夫曼树的构造和编码
6.线索二叉树
7.哈 夫 曼 (Hu
ffma
n)树 的 基 本 概
念,哈夫曼树的构造与带权路径长
度(WPL)的计算及其应用。
8.遍历二叉树
9.树和森林的关系及遍历

1.二叉树的五种基本形态

2.二叉树的性质

性质 1:在二叉树的第 i层上至多有 2i-1个结点(i


≥1)。
性质 2:深度为 k的二叉树至多有 2k -1个结点(k≥1)。

性质 3:对任意一棵二叉树 T,若终端结点数为 n0,而其度数为 2的结点数为 n2,则 n0 = n2 +1。


性质 4:具有 n个结点的完全二叉树的深度为?l
og2n」+1。
性质 5:对于具有 n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对二叉树中的所
— 6—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

有结点从 1开始顺序编号,则对于任意的序号为 i的结点有:


(1)若 i=1,则 i无双亲结点
若 i>1,则 i的双亲结点为 i/

(2)若 2i> n,则 i无左孩子
若 2i
≤n,则 i结点的左孩子结点为 2i
(3)若 2i+1 > n,则 i无右孩子
若 2i+1≤n,则 i的右孩子结点为 2 i+1

3.二叉树的存储结构
二叉树的结构是非线性的,每一结点最多可有两个后继。
二叉树的存储结构有两种:顺序存储结构和链式存储结构。
对于如下图的二叉树,其先序、中序、后序遍历的序列为:
先序遍历:A、B、D、F、G、C、E、H。
中序遍历:B、F、D、G、A、C、E、H。
后序遍历:F、G、D、B、H、E、C、A。

4.先序遍历递归算法

oidPr
eOr
der
(Bi
Tre
ero
ot)
先序遍历二叉树,r
/ oot为指向二叉树(或某一子树)根结点的指针 /
{ i
f(r
oot
! =NULL)
  {Vi
si
t(r
oot->da
ta 访问根结点 /
);  /
   Pr
eOr
der
(ro
ot->LChi
ld);  /
先序遍历左子树 /
   Pr
eOr
der
(ro
ot->RChi
l 先序遍历右子树 /
d);  /
  }
 }
线索二叉树结构:为了区分孩子结点和前驱、后继结点,为结点结构增设两个标志域。

LCh
ild Lt
ag Da
ta Rt
ag RCh
ild

其中:
0  LChi
ld域指示结点的左孩子
Lt
ag=
{ 1  LChi
ld域指示结点的遍历前驱

— 7—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

0  RChi
ld域指示结点的右孩子
Rt
ag=
{ 1 RChi
ld域指示结点的遍历后继

5.树的存储结构

树的存储结构根据应用的不同而不同。

(1)双亲表示法(顺序存储结构)

(2)孩子链表表示法

·定长结点结构

·不定长结点结构

·复合链表结构

(3)孩子兄弟表示法(二叉树表示法)

以二叉链表作为树的存储结构,其结点形式如下图 (a
)所示。

两个指针域:分别指向结点的第一个子结点和下一个兄弟结点。结点类型定义如下:


ype
def
 st
ruc
t  CSno
de

{El
emTy
pe  da
ta;

 s
tr
uct
  CSno
def
ir
st
chi
ld,n
ext
si
bing;

}CSNo
de; 

图所示树的孩子兄弟表示的存储结构如图

6.二叉树转换成树

(1)加虚线。

(2)去连线。

— 8—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

(3)规整化。

7.树和森林的遍历
树的遍历
由树结构的定义可知,树的遍历有二种方法。
·先根遍历
·后根遍历

Huf
fma
n编码方法
以字符集 C作为叶子结点,次数或频度集 W 作为结点的权值来构造 Huf
fma
n树。规定 Huf
fma

树中左分支代表“0”,右分支代表“1”。
从根结点到每个叶子结点所经历的路径分支上的“0”或“1”所组成的字符串,为该结点所对应的
编码,称之为 Huf
fma
n编码。
每个字符都是叶子结点,不可能出现在根结点到其它字符结点的路径上,所以一个字符的 Huf
f
ma
n编码不可能是另一个字符的 Huf
fma
n编码的前缀。

二、图

考点 重点与难点 考试中常见题型 复习思路与方法

1.图的基本概念、名词术语;
2.图的各种存储方法和基本操作 熟练掌握图的存储结构和概念
3.图的深度优先搜索与广度 优 先 填 空 题、选 择 熟练掌握图的最小生成树、拓
最小生成树、拓扑排序
搜索; 题、编 程 题、计 扑排序和关键路径的原理和算
关键路径的求取
4.最小(代价)生成树、最短路径、 算题 法
AOV网与拓扑排序以及 AOE网与 熟练掌握图的遍历
关键路径的基本概念与求解过程。

— 9—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

图的常用的存储结构有:
·邻接矩阵
·邻接链表
·十字链表
·邻接多重表
·边表
邻接多重表与邻接表的区别:
后者的同一条边用两个表结点表示,而前者只用一个表结点表示;除标志域外,邻接多重表与邻
接表表达的信息是相同的,因此,操作的实现也基本相似。

1.图的边表存储结构
在某些应用中,有时主要考察图中各个边的权值以及所依附的两个顶点,即图的结构主要由边来
表示,称为边表存储结构。
在边表结构中,边采用顺序存储,每个边元素由三部分组成:边所依附的两个顶点和边的权值;图
的顶点用另一个顺序结构的顶点表存储。
最小生成树的方法有两种:
·普里姆算法(加点法):有初始点,然后逐个选取离初始点集最近的点,直到所有点都包括进来。
·克鲁斯卡尔算法(加边法):将图中所有边排序,然后每次都选取两点不在同一集合的最小的
边,直到所有点都在同一集合。

2.有向无环图的应用
(1)拓扑排序(To
pol
ogi
calS
ort

AOV-网:用顶点表示活动,用弧表示活动间的优先关系的有向无环图,称为顶点表示活动的网
(Ac
ti
vi
tyOnVe
rte
xNe
two
rk),简称为 AOV-网。
(2)关键路径
AOE-网:在有向图中,用顶点表示事件,用弧表示活动,弧的权值表示活动所需要的时间。我们
把用这种方法构造的有向无环图叫做边表示活动的网(Ac
ti
vi
tyOnEdg
eNe
two
rk),简称 AOE-网。
AOE-网用在工程计划和管理中,人们最关心的是:
·哪些活动是影响工程进度的关键活动?
·至少需要多长时间能完成整个工程?
在 AOE-网中的基本概念:
·源点:存在唯一的、入度为零的顶点,叫源点。
— 10—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

·汇点:存在唯一的、出度为零的顶点,叫汇点。
·关键路径:从源点到汇点的最长路径的长度即为完成整个工程任务所需的时间,该路径叫做关
键路径。
·关键活动:关键路径上的活动叫做关键活动。
求关键路径的基本步骤:
(1)对图中顶点进行拓扑排序,在排序过程中按拓扑序列求出每个事件的最早发生时间 v
e(i
);
(2)按逆拓扑序列求每个事件的最晚发生时间 v
l(i
);
(3)求出每个活动 a
i的最早开始时间 e
(i)和最晚发生时间 l
(i);
(4)找出 e
(i)=l
(i)的活动 a
i,即为关键活动。

3.最短路径
(1)单源点最短路径
(求一个结点到其他结点的最短路径)
对于给定的有向图 G=(V,E)及单个源点 Vs,求 Vs到 G的其余各顶点的最短路径。
针对单源点的最短路径问题,Di
jks
tr
a提出了一种按路径长度递增次序产生最短路径的算法,即
迪杰斯特拉(Di
jks
tr
a)算法。
(2)每一对顶点间的最短路径
用 Di
jks
tr
a算法也可以求得有向图 G=(V,E)中每一对顶点间的最短路径。方法是:每次以一个

不同的顶点为源点重复 Di
jks
tr
a算法便可求得每一对顶点间的最短路径,时间复杂度是 O(n)。
弗罗伊德(Fl
oyd)提出了另一个算法,其时间复杂度仍是 O(n3),但算法形式更为简明,步骤更
为简单,数据结构仍然是基于图的邻接矩阵。

三、小结

本讲主要讲解了非线性结构———树和图的知识点、考点和考试内容。

— 11—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

第 3讲 查找和排序

本讲主要讲解数据结构中的处理技术:查找和排序。

一、查找

考点 重点与难点 考试中常见题型 复习思路与方法

1.查找的基本概念
2.二叉排序树和平衡二叉树
3.B-树的插入与查找;B+树;
填 空 题、选 择 熟练掌握查找的基本概念、二
4.Ha
sh函数的构造及处理冲突的 二叉 排 序 树、平 衡 二 叉
题、构 造 题、计 叉排序树和平衡二叉树、B-树
方法以及平均查找长度的计算。 树、B-树、Ha
sh函数
算题 的思路,Ha
sh法的处理流程。
5.掌握各种查找方法的时间 性 能
分析
的基本概念与求解过程。

平均查找长度:为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,

称为查找算法在查找成功时的平均查找长度。

对于长度为 n的列表,查找成功时的平均查找长度为:

ASL=P1C1 + P2C2 +… + PnCn =∑ PiCi


i=1

其中 Pi为查找列表中第 i个数据元素的概率,Ci为找到列表中第 i个数据元素时,已经进行过的

关键字比较次数。

 基于线性表的查找法

 (顺序查找法、折半查找法和分块查找法)
比较式查找法 

  基于树的查找法

查找的基本方法:  (二叉排序树,平衡二叉排序,B树)



计算式查找法 -HASH(哈希)查找法

设关键字的输入顺序为:
45,
24,
53,
12,
28,
90,按上述算法生成的二叉排序树的过程:

— 12—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

对同样一些元素值,如果输入的顺序不同,则所建的二叉树形态也不同。如果将上述例子中的关
键字顺序变为:
24,
53,
90,
12,
28,
45,则生成的二叉排序树为:

1.树形索引表
B_树是一种平衡的多路查找树。其变型体是 B+树 。
(1)B_树

B_树的生成也是从空树起,逐个插入关键字。插入时不是每插入一个关键字就添加一个叶子结
点,而是首先在最低层的某个叶子结点中添加一个关键字,然后有可能“分裂”。
(2)B_树的插入
例:已知关键字集为{37,
70,
12,
45,
90,
3,24,
61,
53},要求从空树开始,逐个插入关键字,创建一
棵 3阶 B树.创建过程如下图所示.

— 13—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

自己思考一下插入 5
3后的分裂情况。

二、排序

考点 重点与难点 考试中常见题型 复习思路与方法

1.排序的基本概念,各种内排序方
法的基本原理和特点,包括排序过
程中进行的元素之间的比较次数,
排序总趟数、排序稳定性以及时间
复杂度与空间复杂度计算;
2.插 入 排 序 法 (含 折 半 插 入 排 序
法);
1.
掌握各种排序方法处理问题
3.选择排序法; 构造题
1.希尔排序 思路
4.(起)泡排序法; 分析题
2.快速排序 2.掌握各种排序方法性能比较
5.希尔(S
hel
l)排序法; 选择题
3.堆排序 3.
掌握各种排序方法的优缺点
6.快速排序法; 填空题
及适用范围
7.堆 (He
ap)排序法,包括堆的 定
义与构造;
8.二路归并排序法。
9.基数排序

0.各种 内 部 排 序 算 法 的 比 较,在
时间、空间、程序效率等方面

1.内部排序算法的应用

1.排序的基本概念
若排序算法所需的辅助空间不依赖问题的规模 n,即空间复杂度是 O(1),则称排序方法是就地
排序,否则是非就地排序。
主要分为:
·插入排序
·交换排序
·选择排序
·归并排序
·基数排序
(1)插入排序:依次将无序序列中的一个记录,按关键字值的大小插入到已排好序一个子序列的
— 14—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

适当位置,直到所有的记录都插入为止。具体的方法有:直接插入、折半插入和希尔排序。
(2)交换排序:对于待排序记录序列中的记录,两两比较记录的关键字,并对反序的两个记录进行
交换,直到整个序列中没有反序的记录偶对为止。具体的方法有:冒泡排序、快速排序。
(3)选择排序:不断地从待排序的记录序列中选取关键字最小的记录,放在已排好序的序列的最
后,直到所有记录都被选取为止。具体的方法有:简单选择排序、树形选择排序、堆排序。
(4)归并排序:利用“归并”技术不断地对待排序记录序列中的有序子序列进行合并,直到合并为
一个有序序列为止。
(5)基数排序:按待排序记录的关键字的组成成分(“位”)从低到高(或从高到低)进行。每次是
按记录关键字某一“位”的值将所有记录分配到相应的桶中,再按桶的编号依次将记录进行收集,最后
得到一个有序序列。

2.堆排序
堆排序是在简单排序的基础上,将向量中存储的数据看成一颗完全二叉树,利用完全二叉树中双
亲结点和孩子结点之间的内在关系来选择关键字最小的记录。
堆排序思想:
①对一组待排序的记录,按堆的定义建立堆;
②将堆顶记录和最后一个记录交换位置,则前 n-1个记录是无序的,而最后一个记录是有序的;
③堆顶记录被交换后,前 n-1个记录不再是堆,需将前 n-1个待排序记录重新组织成为一个
堆,然后将堆顶记录和倒数第二个记录交换位置,即将整个序列中次小关键字值的记录调整(排除)出
无序区;
④重复上述步骤,直到全部记录排好序为止。
·基数排序(Ra
dixSo
rti
ng)又称为桶排序或数字排序:按待排序记录的关键字的组成成分(或
“位”)进行排序。
·基数排序和前面的各种内部排序方法完全不同,不需要进行关键字的比较和记录的移动。借
助于多关键字排序思想实现单逻辑关键字的排序。

3.多关键字排序
设有 n个记录{R1,R2,…,Rn},每个记录 Ri的关键字是由若干项(数据项)组成,即记录 Ri的关

y是若干项的集合:{Ki1,Ki2,…,Kid}(d>1)。
键字 Ke
记录{R1,R2,…,Rn}有序的,指的是 i
,j∈[1,n],i<j,若记录的关键字满足:
{Ki1,Ki2,…Kid}<{Kj1,Kj2,…Kjd},即 Kip≤Kjp(p=1,2,… d)
多关键字排序思想:
·先按第一个关键字 K1进行排序,将记录序列分成若干个子序列,每个子序列有相同的 K1值;然
后分别对每个子序列按第二个关键字 K2进行排序,每个子序列又被分成若干个更小的子序列;如此重
复,直到按最后一个关键字 Kd进行排序。
·最后,将所有的子序列依次联接成一个有序的记录序列,该方法称为最高位优先(Mo
stSi
gni
fi


antDi
gi
tfi
rs
t)。
— 15—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

·另一种方法正好相反,排序的顺序是从最低位开始,称为最低位优先 (Le
astSi
gni
fi
cantDi
gi


ir
st)。

4.排序算法小结
1)熟练掌握三种简单排序方法(直接插入、冒泡排序、简单选择)的基本思想和算法描述,掌握这
些排序法的特点和适用情况,并能应用分析。
简单排序法一般只用于 n较小的情况(例如 n<30).当序列中的记录“基本有序”时,直接插入排
序是最佳的排序方法。如果记录中的数据较多,则应采用移动次数较少的简单选择排序法。
2)可以将简单排序法与性能较好的排序方法结合使用。例如,在快速排序中,当划分子区间的长
度小于某值时,可以转而调用直接插入排序法;或者先将待排序序列划分成若干子序列,分别进行直
接插入排序,然后再利用归并排序法,将有序子序列合并成一个完整的有序序列。
表 9-1 主要内部排序方法的性能

方法 平均时间 最坏所需时间 附加空间 稳定性


2 2
直接插入 O(n) O(n) O(1) 稳定的


hel
l排序 O(n1.3) O(1) 不稳定的
2 2
直接选择 O(n) O(n) O(1) 不稳定的

堆排序 O(n"2n) O(n"2n) O(1) 不稳定的


2 2
冒泡排序 O(n) O(n) O(1) 稳定的

快速排序 O(n"2n) O(n2) O("2n) 不稳定的

归并排序 O(n"2n) O(n"2n) O(n) 稳定的

基数排序 O(d(n+r
)) O(d(n+r
)) O(n+r
) 稳定的

三、小结

查找和排序是数据结构基本的数据处理技术。本讲主要讲解了这两部分内容的知识点和考点以
及考试技巧。

— 16—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

《数据结构》考研模拟试卷一

一、简答题(5分 ×4=20分)

1.数据元素之间的基本结构有哪四类?
2.算法有哪些特性?
3.顺序存储结构与链式存储结构各有什么优缺点?
4.简述栈和队列的异同点。

二、填空题(2分 ×10=20分)

1.评价一个算法一般从 (1) 和 (2)  两方面来考虑。
2.在顺序表中插入和删除一个数据元素时,平均要移动 (3) 元素,具体移动的元素个数与其
物理位置有关。
3.删除 P结点之后的 S结点的语句是 (4)  ; (5)  ;
4.一个含有头结点的单链表,头指针为 he
ad,则判断链表为空的条件是 (6) 。
5.TAI
L[HEAD[((a
,b),(c
,d))]]是 (7) 。
6.将一棵树转换成二叉树后,二叉树的根结点没有 (8)  子树。
7.树中结点之间是 (9) 的关系,图中结点之间是  (10) 的关系。

三、选择题(2分 ×10=20分)

1.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(  )。
A.必须是连续的               B.部分地址必须是连续的
C.一定是不连续的    D.不一定是连续的
2.链表不具有的特点是( )。
A.可随机访问任一元素 B.插入删除不需要移动元素
C.不必事先估计存储空间 D.所需空间与线性表长度成正比
3.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍。
A.
1/2         B.
1         C.
2         D.

4.栈 S最多能容纳 4个元素。现有 6个元素按 A、B、C、D、E、F的顺序进栈,问下列哪一个序列
是可能的出栈序列?( )
A.E、D、C、B、A、F B.B、C、E、F、A、D
C.C、B、E、D、A、F D.A、D、F、E、B、C
5.用二维数组 A[][]以行优先次序来存储 5行 4列的矩阵 M,每个元素占用两个字节,已知 A
[0][0]的地址为 100
0,矩阵 M中 A[4][2]元素的地址是(  )。
— 17—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

A.
1024  B.
1026 C.
1036 D.
1022
6.一个二叉树的前序序列是 ABCDEF,中序序列是 BDCAEF,那么该二叉树的后序序列是( )
A.DCBFEA B.BCDAFB C.DCBAFE D.CDBAEF
7.关键路径是指 AOE(Ac
ti
vi
tyOnEdg
e)网中( )。
A.最长的回路 B.最短的回路
C.从源点到汇点(结束顶点)的最长路径 D.从源点到汇点(结束顶点)的最短路径
8.已知一个有向图的邻接矩阵表示,要删除所有从第 i个结点发出的边,应该(  )
A.将邻接矩阵的第 i行删除  B.将邻接矩阵的第 i行元素全部置为 0
C.将邻接矩阵的第 i列删除 D.将邻接矩阵的第 i列元素全部置为 0
9.有一个含头结点的双向循环链表,头指针为 he
ad,则其为空的条件是(  )
A.he
ad->pr
ior==NULL  B.he
ad->n
ext==NULL 
C.h
ead->ne
xt==he
ad   D.he
ad->ne
xt-> pr
ior==NULL
10.某二叉树结点的中序序列为:A、B、C、D、E、F、G,后序序列为:B、D、C、A、F、G、E,则其左子树
中结点数目为(  )
A.
3 B.
2  C.
4 D.

四、构造题(2
0分)

1.要传送数据 s
tat
e s
eat
 ac
t t
ea c
at s
et a
 ea
t,问如何传送才能使传送的长度最短?s
eat
的编码应该是什么?平均码长为多少?(给空格也编码)(8分)
2.已知关键字序列 (7
5,33,
52,
41,
12,
88,
66,
27),哈希表长度为 10,哈希函数为 H(K)=K%7,
用线性探测再散列解决冲突。请构造哈希表。并计算等概率情况下查找成功的平均查找长度(7分)
3.将下面的二叉树还原为树或者森林。(5分)

五、编程题(20分)

1.(5分)采用顺序存储方式存储栈,假设栈的存储结构如下所示,请写出判栈空函数 I
sEmpt
y和
进栈的函数 Pu
sh。
#d
efi
neSt
ack_Si
ze50

ype
defs
tr
uct

  S
tac
kEl
emTy
pe e
lem[St
ack_S
ize
];
— 18—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

  i
ntt
op;
}S
eqS
tac
k;
2.(5分)编写算法统计二叉树的叶子结点数目。(可参考下面的数据结构定义)

ype
defs
tr
uctNo
de{
   Da
taTy
peda
ta;
   s
tr
uctNo
deLChi
ld;
   s
tr
uctNo
deRChi
ld;
}Bi
TNo
de,Bi
Tre
e;
3.(10分)用两个顺序表 LA和 LB,其元素均为非递减有序排列,编写一个算法,将它们合并成一
个顺序表 LC,要求 LC也是非递减有序排列,要求用原结点空间。

— 19—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

《数据结构》考研模拟试卷二

一、简答题:(每小题 5分,共 15分)

1.什么情况下二叉排序树的查找性能较好?什么情况下二叉排序树的查找性能最差?
2.比较顺序表与单链表的优缺点。
3.在起泡排序过程中,有的关键字在某趟排序中可能朝着与最终排序相反的方向移动,试举例说
明之。

二、判断正误:(每小题 1分,共 5分)

1.在拓扑序列中,如果结点 Vi排在结点 Vj的前面,则一定存在从 Vi到 Vj的路径。(  )

2.在采用线性探测法处理冲突的散列表中,所有同义词在表中一定相邻。(  )
3.在一个小根堆中,具有最大值的元素一定是叶结点。(  )
4.索引顺序表的特点是块间可无序,但块内一定要有序。(  )
5.哈夫曼树中没有度为 1的结点,所以必为满二叉树。(  )

三、单项选择题:(每小题 1分,共 5分)

1.对于只在表的首、尾进行插入操作的线性表,宜采用的存储结构为(  )
A.顺序表 B.用头指针表示的单循环链表
C.用尾指针表示的单循环链表 D.单链表
2.假设以第一个元素为分界元素,对字符序列(Q,H,C,Y,P,A,M,S,R,D,F,X)进行快速
排序,则第一次划分的结果是(  )
A.(A,C,D,F,H,M,P,Q,R,S,X,Y) B.(A,F,H,C,D,P,M,Q,R,S,Y,X)
C.(F,H,C,D,P,A,M,Q,R,S,Y,X) D.(P,A,M,F,H,C,D,Q,S,Y,R,X)
3.下面是三个关于有向图运算的叙述:
(1)求有向图结点的拓扑序列,其结果必定是唯一的
(2)求两个指向结点间的最短路径,其结果必定是唯一的
(3)求 AOE网的关键路径,其结果必定是唯一的
其中哪个(些)是正确的?(  )
A.只有(1) B.(1)和(2) C.都正确 D.都不正确
4.若进栈序列为 a
,b,c
,则通过入出栈操作可能得到的 a
,b,c的不同排列个数为(  )
A.
4 B.5 C.
6 D.

5.以下关于广义表的叙述中,正确的是(  )
A.广义表是由 0个或多个单元素或子表构成的有限序列
B.广义表至少有一个元素是子表
— 20—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

C.广义表不能递归定义
D.广义表不能为空表

四、填空题:(每小题 2分,共 20分)

1.一棵含有 101个结点的完全二叉树存储在数组 A[1..101]中,对 1≤ k≤ 101,若 A[k]是


     结点,则 k的最小值是:     ,k的最大值是:     。
2.设 s=’YOUAREJ
UDGI
NGI
TRI
GHTORWRONG’,顺序执行下列操作:S
ubSt
ri
ng(s
ub1,s
,1,
8);SubS
tri
ng(s
ub2,s
,20,
5);St
rCa
t(s
ub1,s
ub2);则最后 s
ub1的值为:    。
3.若一个算法中的语句频度之和为 T(n) =3720n+4nl
ogn,则算法的时间复杂度为 。
4.广义表((((a
),b),c
),d)的表头是     ,表尾是      。
5.已知有向图的邻接矩阵,要计算 i号结点的入度,计算方法是:将     累加。
6.要在一个单链表中 p所指结点之后插入一个子链表,子链表第一个结点的地址为 s
,子链表最
后一个结点的地址为 t
,则应执行操作:     和     。
7.用带头结点的循环链表表示的队列,若只设尾指针 r
ear
,则队空的条件是     。
8.设矩阵 A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组 B[1,n(n-
1)/
2]中,对任一下三角部分中任一元素 a
i(i>=j
j ),在一维数组 B的下标位置 K的值是    。
9.在 n个结点的二叉树的二叉链表中,共有     个空链域。
10.n个顶点的连通无向图至少有     条边,至多有    条边。

五、构造题:(每小题 6分,共 30分)

1.设散列表为 HT[0…12],即表的长度为 13。散列函数为:H(ke


y)=k
ey%13,采用线性探测再
散列法解决冲突,若插入的关键码序列为{25,
9,50,
43,
15,
28,
42,
24,
12}。
1)试画出插入这 9个关键码后的散列表。
2)计算在等概率情况下查找成功的平均查找长度 ASL。
2.在一棵初始为空的二叉排序树中,依次插入 5
0,12,80,34,27,
23,5
5,18,4
0,26
(1)画出二叉排序树的生成过程;
(2)求在等概率的情况下,查找成功的平均查找长度 ASL
3.关键路径的求取。
4.图 1表示一个地区的通讯网,边表示城市间的通讯线路,边上的权值表示架设线路花费的代
价,请找出能连通每个城市、且总代价最省的 n-1条线路,画出线路生成过程。

图1
5.对关键字序列 (7
2,87,
61,
23,
94,
16,
05,
58)进行快速排序和堆排序,使之按关键字递减次序

— 21—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

排列。请写出快速排序的一趟排序过程和初始堆以及一趟堆排序后的序列状态。

六、算法设计题:(共 25分)

1.已知带头结点的单链表 L,编写算法删除 L中从 k开始的 n个元素,并将得到的链表就地逆置。


2.已知一棵树用孩子 -兄弟链表存储。编程,计算该树的叶子数。

— 22—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

《数据结构》考研模拟试卷三

一 、简答题(每小题 5分,共 15分)

1.简述线性结构与非线性结构的区别。
2.链式存储结构有哪些主要优缺点?
3.简述在图的遍历过程中,设置访问标志数组 v
isi
te
d[]的作用。

二、单项选择题(每小题 1分,共 10分)

1.评价一个算法性能好坏的重要标准是( )
A.算法易于调试 B.算法易于理解
C.算法的正确性 D.算法的时间复杂度
2、若某个线性表中最常用的操作是存取第 i个元素及在表尾进行插入删除操作,则采用( )的
存储方式最节省时间。
A.顺序表 B.双向链表 C.单向循环链表 D.双向循环链表
3.具有 3个结点的二叉树最多可有( )种不同的形态。
A.
2 B.
3 C.
4 D.

4.已知一个有向图 g具有 n个顶点和 e条弧,用邻接表来存储表示时,需要( )个弧结点。

A.n B.n C.e D.
2e
5.广义表 A=(a
,b,(c
,d),(e
,(f
,g))),则 Ta
il(He
ad(Ta
il(Ta
il(A))))的值为( )。
A.(g
) B.(d) C.c D.d
6.已知:哈希表的长度 m=10,哈希函数:H(ke
y)=k
ey%7,关键字为 k的记录在定址时产生了冲
突,若采用开放定址法解决冲突,则新地址的计算公式为( )
A.(H(k)+di
)/1
0 B.(H(k)+di
)/7 C.(H(k)+di
)%10 D.(H(k)+d
i)%7
7.以下哪一个不是队列的基本运算?
A.在队尾插入一个新元素 B.从队列中删除第 i个元素
C.判断一个队列是否为空 D.读取队头元素的值
8.一个有序表为{1,
3,9,
12,
32,
41,
45,
62,
75,
77,
82,
95,
100},当用折半查找值为 1
9的结点时需
要比较( )次后,查找失败。
A.
1 B.
2 C.
4 D.

9.下面关于串的叙述中,哪一个是不正确的?(  )
A.串是字符的有限序列 B.空串是由空格构成的串
C.模式匹配是串的重要运算 D.串既可顺序存储,也可采用链式存储
10.若一个待排序元素序列基本有序,则选用( )方法较快。
— 23—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

A.直接插入排序 B.归并排序 C.堆排序 D.快速排序

三、填空题(每空 2分,共 20分)

1.在一个单链表中 P所指结点后插入一个 S所指结点时,应执行语句:     和    操


作。
2.已知深度为 7的完全二叉树的第 7层有 10个叶子结点,则第 6层有    个叶子结点。
3.在一个有向图的邻接表中,第 i个链表中边结点的个数等于对应顶点的     度。
4.如下程序段:  f
or(i=1;i<=n-1;i++)
           f
or(j=i+1;j<=n;j++)
             x=x+1;
其中,语句 x=x+1执行的语句频度为      。
5.设有一个二维数组 A[1..
12,
1..
10],采用以列序为主序存储,每个数据元素占有 2个字节,该
数组的首元素 A[1][1]的地址为 1 5]的地址为     。
200,则 A[6,
6.在平均情况下,速度最快的排序方法为     。
7.判断线索二叉树中某结点 p指针有左孩子的条件是     .
8.设森林 F中有三棵树,第一、第二和第三棵树的结点个数分别为 M1、M2和 M3。与森林 F对应
的二叉树根结点的右子树上的结点个数是     。
9.将一棵有 1
00个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根
结点编号为 1,则编号最大的非叶结点的编号为     。

四、构造题(共 4小题,共 25分)

1.(6分)已知二叉树的中序序列为 DBGEAFC,后序序列为 DGEBFCA,给出对应的二叉树。


2.(6分)给定权值{8,
12,
4,5,
26,
16,
9},构造一棵带权路径长度最短的二叉树,并计算其带权路
径长度。
3.(6分)已知关键字序列 (72,
87,
61,
23,
94,
16,
05,
58),请将其筛为一个小根堆。
4.(7分)已知一棵树如图所示,
1)请画出其对应的二叉树 2)写出该树的先根及后根遍历序列。

五、算法分析题(共 10分)

阅读下面程序,并回答有关问题。
其中 BS
Tre
e为用二叉链表表示的二叉排序树类型。
— 24—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

(1)变量 p、q、s的作用各是什么?(3分)
(2)说明带下划线的语句的含义。(4分)
(3)简要说明程序功能。(3分)

ntPr
oc(BSTr
ee bs
t, Ke
yTy
pe K)
{BSTr
eep, q, s

s=(BS
Tre
e)ma
ll
oc(s
ize
of(BSTNo
de));
 s-> ke
y= K; s-> l
chi
ld = NULL; s-> r
chi
ld = NULL;
if(bst== NULL) {bs
t= s
; r
etur
n 1;}

p= NULL; q = bst;
   
 whil
e(q! = NULL)
  {i y) { p= q;  q = q -> l
f(K < q -> ke chi
ld; }
     

lse{ p= q;  q = q -> r
chi
ld; }
     

f(K <p-> k
i e
y) p-> l
chi
ld= s; 
     

lsep-> rc
hil
d= s; 
    

etur
n1; 

六、设计题(2小题,共 2
0分)

1.设有一个由正整数组成的单链表 L(含头结点),编写完成下列功能的算法:找出最小值结点
P,若最小值是奇数,则删除结点 P。[10分]
2.设二叉树按照二叉链表方式存储,编写非递归算法判别一棵二叉树是否是一棵正则二叉树。
正则二叉树是指:在二叉树中不存在子树个数为 1的结点。[10分]

— 25—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

《数据结构》考研模拟试卷四

一 、简答题(每小题 5分,共 15分)

1.有哪四类基本数据结构?
2.使用折半查找的两个前提条件是什么?
3.在一般的顺序队列中,什么是假溢出?怎样解决假溢出问题?

二、单项选择题(每小题 1分,共 1
0分)

1.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。这是哪种
排序方法的基本思想?(  )
A.堆排序 B.直接插入排序 C.快速排序 D.冒泡排序
2.已知完全二叉树的第 7层有 10个结点,则整个二叉树的结点数为多少个?(  )
A.73 B.
74 C.41 D.
63
3.有一个含头结点的双向循环链表,头指针为 he
ad,则其为空的条件是(  )
A.he
ad->pr
ior==NULL B.he
ad->ne
xt==NULL 
C.he
ad->ne
xt==h
ead D.he
ad->ne
xt-> pr
ior==NULL
4.两栈共享一个数组 S[M]空间,则两栈判满的条件为(  )
A.S->t
op[0] = = -1  B.S->t
op[1] = = M  
C.S->t
op[0]+1 = =S->t
op[1] D.S->t
op[0] = = S->t
op[1]
5.若用一个大小为 6的数组来实现循环队列,且当前 f
ron
t和 r
ear的值分别为 3和 0,当从队列中
删除一个元素。再加上两个元素后,f
ront和 r
ear的值分别为(  )。
A.
5和 1 B.
1和 5 C.
4和 2 D.
2和 4
6.在长度为 n的顺序表的第 i个位置上插入一个元素(1≤ i≤n+1),元素的移动次数为(  )
A.n# i+1 B.n# i C.i D.i# 1
7.在创建链表时,若想得到的链表元素顺序和输入顺序相同,应该采用哪种建表方式(  )
A.链表的头插法 B.链表尾插法  
C.带头结点的建表方式 D.不带头结点的建表方法
8.对包含 n个元素的哈希表进行查找,平均查找长度为(  )
A.O(l
og2n) B.O(n) C.O(nl
og2n) D.不直接依赖于 n
9.设 A[n][n]为一个对称矩阵,数组下标从[0][0]开始。为了节省存储,将其上三角部分按行
存放在一维数组 B[0,…m-1],m=n(n+1)/
2,对上三角部分中任一元素 Aij(i≤ j
),它在一维数组
B的 下标 k值是(  )
A.(2n-i+1)i
/2+(j-i
) B.(2n-i
)i/
2+(j-i

— 26—
严蔚敏《数据结构》冲刺串讲与模拟四套卷

C.(2n-i
)i/
2+(j-i+1) D.(n-i+1)i
/2+(j-i


0.下面关于图的拓扑序列说法正确的是(  )
A.计算图的关键路径时必须先得到图的拓扑序列
B.计算图的最短路径时必须先得到图的拓扑序列
C.计算图的最小生成树时必须先得到图的拓扑序列
D.不管有向图还是无向图都可以得到图的拓扑序列

三、填空题 20分(每空 2分,共 20分)

1.假设用循环单链表实现队列,若队列非空,且队尾指针为 R,则将新结点 S加入队列时,需执


     ;    ;R=S;
行下面语句:
2.通常是以算法执行所耗费的     和所占用的     来判断一个算法的优劣。
3.图的邻接表和邻接多重表两种存储方式的区别    。
4.在具有 n个结点的完全二叉树中,若编号为 i的结点的右孩子存在。则其右孩子结点的编号为
    。
5.填空完成下面一趟快速排序算法:

nt QKPa
ss(Re
cor
dTy
pe r[], i
nt l
ow,i
nt hi
gh)

  x= r[l
ow];
  whi
le(l
ow < hi
gh)
  {
    whi
le(l
ow <h
igh&&r[     ].ke
y>= x
.ke
y)
     hi
gh - -;
  i
f(l
ow < hi
gh)
    {  r[     ] = r[hi
gh]; l
ow++;} 
    whi
le(l
ow <h
igh&&r[     ].ke
y< x
.ke
y) 
     l
ow++;
    i
f(l
ow < hi
gh)
     {r[     ] = r[l
ow]; hi
gh--;}
  }
  r[l
ow] = x
;  r
etur
n l
ow;   

四、构造题(5小题,共 30分)

注:构造题只要求手工构造相应结果,不需要编写实现程序。
1.(6分)已知关键字集合:{5
0,52,
85,
22,
96,
17,
36,
55},用冒泡排序从小到大排序,分别写出
第一趟、第二趟、第三趟排序结束时的序列。
2.(7分)设哈希函数 H(K)=(K的第一字母在字母表中的序号)% 11,哈希表长度为 11,若输
— 27—
考试点(www.ka
oshi
dia
n.c
om)名师精品课程 电话:
400
6885
365

入顺序为(D,BA,TN,M,CI
,I,K,X,TA),处理冲突方法为线性探测再散列法,要求构造哈希表,并求
出等概率情况下查找成功平均查找长度。
3.(5分)下图是一个 3阶 B-树。试分别画出在插入 60、
10、
12之后 B-树的变化。

4.(6分)已知叶结点权值集合为:{5,
7,2,
3,6,
9},要求给出哈夫曼树,并计算其带权路径长度
WPL。
5.(6分)已知一个图的顶点为 A、B、C、D,其邻接矩阵的上三角元素(包括主对角线元素)全为 0,
其他元素均为 1。请画出该图,并给出其邻接表。

五、算法设计题(2小题,共 2
5分)

注:算法设计题只要求给出描述算法的子函数,不需要编写完整的实现程序。
1.假设有一个长度大于 1的循环单链表,表中既无头结点也无头指针。已知 s为指向链表中某个
结点的指针,试编写算法,在链表中删除指针 s指向的结点。【15分 】
2.已知二叉排序树 b
st,采用二叉链表存储结构。
(1)编写算法,逐层输出二叉排序树中的结点。【5分 】
(2)编写算法,按结点值的递减顺序输出二叉排序树中的结点。【5分 】

— 28—

You might also like