tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> IT/计算机 >>

高中信息技术 第1章 数据结构课件 沪教版选修1


二级公共基础知识
第一章 数据结构基础

1

内容提要
? 算法:算法的基本概念、算法复杂度 ? 数据结构的基本概念:什么是数据结构、 数据结构的图 形表示、 线性结构与非线性结构 ? 线性表及其顺序存储结构:线性表的基本概念、 顺序存 储结构、插入运算、删除运算 ? 栈和队列:栈及其基本运算、队列及其基本运算 ? 线性链表:基本概念、基本运算、循环链表及其基本运算 ? 树与二叉树:树的基本概念、二叉树及其基本性质、 二 叉树的存储结构、二叉树的遍历 ? 查找技术: 顺序查找、二分法查找 ? 排序技术:交换类排序法、 插入类排序法、选择类排序 法
2

1.1 算法

3

1.1.1 算法的基本概念
? 算法是解题方案的准确而完整的描述,它不等于程序,也 不等计算方法。 ? 1.算法的基本特征 – 可行性(effectiveness) – 确定性(definiteness) – 有穷性(finiteness) – 拥有足够的情报 ? 2.算法的基本要素 – 算法中对数据的运算和操作 ? 算术运算:包括加、减、乘、除等) ? 逻辑运算:包括“与”、“或”、“非”等运算) ? 关系运算:包括“大于”、“小于”、“等于”、“ 不等于”等) 4 ? 数据传输:包括赋值、输入、输出等操作

1.1.1 算法的基本概念
? 3.算法设计的基本方法
– 列举法 – 归纳法 – 递推 – 递归 – 减半递推技术 – 回溯法

5

1.1.2 算法复杂度
? 算法复杂度:时间复杂度、空间复杂度 ? 1.算法的时间复杂度
– 执行算法所需要的计算工作量 – 与下列因素有关:
? ? ? ? 书写算法的程序设计语言 编译产生的机器语言,代码质量 机器执行指令的速度 问题的规模

6

1.1.2 算法复杂度
? 问题的规模函数
算法的工作量=f(n)

? 算法中基本操作重复执行的频率T(n),是问题规 模n的某个函数f(n),记作:
T(n)=O(f(n)) – 记号“O”读作“大O”。表示随问题规模n的增加,算法 执行时间的增长率和f(n)相应增加。

? 常见算法复杂度:
– O(1):常数阶 O(n):作线性阶 O(n2):平方阶 – O(n3):立方阶 O(logn):对数阶 O(2n):指数阶
7

1.1.2 算法复杂度
? n×n矩阵相乘算法:

? 时间复杂度为O(n3)。
8

1.1.2 算法复杂度
? 分析算法的工作量两种方法:
– 平均性态 – 最坏情况复杂性

9

1.1.2 算法复杂度
? 2.算法的空间复杂度
– 算法执行过程中所需的最大存储空间 – 存储量包括以下三部分
? 算法程序所占的空间 ? 输入的初始数据所占的存储空间 ? 算法执行过程中所要的额外空间

– 算法空间复杂度可定义为: S(n)=O(f(n)) – 原地工作(in place)的算法:记作O(1) – 压缩存储技术
10

1.2 数据结构的基本概念

11

1.2.1 什么是数据结构
? 1.数据结构研究的主要内容
– 数据的逻辑结构 – 数据的存储结构 – 对各种数据结构进行的运算

? 2.研究数据结构目的
– 提高数据处理的速度 – 尽量节省在数据处理过程中所占用的计算机存 储空间
12

1.2.1 什么是数据结构
? 1.数据结构研究的主要内容
– 数据的逻辑结构 – 数据的存储结构 – 对各种数据结构进行的运算

? 2.研究数据结构目的
– 提高数据处理的速度 – 尽量节省在数据处理过程中所占用的计算机存 储空间
13

1.2.1 什么是数据结构
线性表 A.线性结构 1.数据的逻辑结构 数 据 结 构 的 三 个 方 面 B.非线性结构 栈 队 树形结构 图形结构 2、数据的存储结构 A 顺序存储 B 链式存储 3、数据的运算:检索、排序、插入、删除、修改等。
14

1.2.1 什么是数据结构
? 3.数据结构的定义 – 相互有关联的数据元素的集合 – 数据元素之间的关系可以用前后件关系 来描述 – 一个数据结构应包含以下两方面信息: ? 表示数据元素的信息 ? 表示各数据元素之间的前后件关系
15

1.2.1 什么是数据结构
? 4.数据的逻辑结构
– 对数据元素之间的逻辑关系的描述 – 只抽象地反映数据元素之间的逻辑关系,与计 算机中的存储无关 – 两个要素:
? 数据元素的集合,通常记为D; ? 前后件关系,通常记为R

– 一个数据结构B可以表示为:

B=(D,R)
16

1.2.1 什么是数据结构
? 5.数据的存储结构
– 数据的逻辑结构在计算机存储空间中的存放形式 ,它包括数据元素的存储方式和关系的存储方式 。 – 常用的存储结构:
? 顺序 ? 链式 ? 索引

– 一种数据结构可根据需要采用不同的存储结构。 采用不同的存储结构,其数据处理的效率是不同
17

1.2.2 数据结构的图形表示
? 数据结点:用方框表示
– 根结点、终端结点

? 前后件关系:用有向线段表示
父亲 春 夏 秋 冬 儿子 女儿

? 基本运算:
(a)一年四季数据结构

– 插入运算 – 删除运算 – 查找、分类、合并、分解、复制、修改、……

(b)家庭关系数据结构

18

1.2.3 线性结构与非线性结构
? 空的数据结构:一个数据元素都没有 ? 线性结构
– 如果一个非空数据结构满足下列两个条件:
? 有且只有一个根结点; ? 每一个结点最多有一个前件,也最多有一个后件。

– 常见的线性结构有:线性表、栈与队列、线性 链表

? 非线性结构
– 如果一个数据结构不是线性结构 – 常见的非线性结构有:树、二叉树、图
19

1.3 线性表及其顺序存储结构

20

1.3.1 线性表的基本概念
? 线性表:由n(n≥0)个相同类型数据元素构成的有 限序列: ? n定义为线性表的表长;n=0 时的线性表被称为空 表。称i为在线性表中的位序。 ? 例如:
– 英文大写字母表
(A,B,C,D,E,F,…X,Y,Z)

(a1 , a2 ,?, ai ,?an )

– 同一花色的13张扑克牌
? (2,3,4,5,6,7,8,9,10,J,Q,K,A)
21

1.3.1 线性表的基本概念
? 线性表的结构特征
– 数据元素在表中的位置由序号决定,数据元素 之间的相对位置是线性的; – 对于一个非空线性表,有且只有一个根结点a1 ,它无前件,有且只有一个终端结点an,它无 后件,除根结点与终端结点外,其他所有结点 有且只有一个前件,也有且只有一个后件。

? 线性表的存储结构
– 顺序存储 – 链式存储
22

1.3.2 线性表的顺序存储结构
? 两个基本特点: – 线性表中所有元素所占的存储空间是连续的。 – 线性表中各数据元素在存储空间中是按逻辑顺序依 次存放的。 ? 存储示意图
逻辑地址 数据元素 … 1 2 a1 a2 物理地址 Loc(a1) Loc(a1)+k


i ai Loc(a1)+(i-1)k


n an Loc(a1)+(n-1)k

Loc(ai ) ? Loc(a1 ) ? (i ? 1) * k



23

1.3.3 顺序表的插入运算
1 83 2 3 4 5 6 7 8 9 10 (a)长度为8的线性表 V(1..10) 19 30 55 62 38 21 36 67 12 1 2 3 4 5 6 7 8 9 10 (b)插入83后,长度变为9 V(1..10) 19 83 30 55 62 38 21 36 67 1 2 3 4 5 6 7 8 9 10 V(1..10) 19 83 30 55 62 38 12 21 36 36 67 67

(c)插入12后,长度变为10

24

1.3.4 顺序表的删除运算
1 2 3 4 5 6 7 8 9 10 (a)长度为8的线性表 V(1..10) 19 30 55 62 38 21 36 67 1 2 3 4 5 6 7 8 9 10 (b)删除19后,长度变为7 V(1..10) 30 55 30 62 55 38 62 21 38 36 21 67 36 1 2 3 4 5 6 7 8 9 10 (c)删除36后,长度变为6
25

V(1..10) 30 55 62 38 21 67

顺序表的插入和删除分析
? 插入算法的分析
– 假设线性表中含有n个数据元素,在进行插入操作时,若假定在n+1个位置 上插入元素的可能性均等,则平均移动元素的个数为: n?1

? 删除算法的分析

1 n Eis ? ? pi (n ? i ? 1) ? 2 n ? 1 i?1
1 n n ?1 Edl ? ? pi (n ? i ) ? n i ?1 2

– 在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素 的个数为:

? 分析结论
– 顺序存储结构表示的线性表,在做插入或删除操作时,平均需要移动大约 一半的数据元素。当线性表的数据元素量较大,并且经常要对其做插入或 删除操作时,这一点需要值得考虑
26

1.4 线性链表

27

1.4.1 线性链表的基本概念
? 1.线性表顺序存储的缺点
– 插入或删除的运算效率很低。在顺序存储的线 性表中,插入或删除数据元素时需要移动大量 的数据元素。 – 线性表的顺序存储结构下,线性表的存储空间 不便于扩充。 – 线性表的顺序存储结构不便于对存储空间的动 态分配。

28

1.4.1 线性链表的基本概念
? 2.线性链表
– 线性表的链式存储结构 – 物理存储单元上非连续、非顺序的存储结构, 数据元素的逻辑顺序是通过链表中的指针链接 来实现的 – 每个结点由两部分组成:数据域和指针域
数据域 data 指针域 next HEAD a1 a2

?

an-1

an

^

(a)结点结构

(b)一个非空的线性链表示意图

29

1.4.1 线性链表的基本概念
? 双向链表:每个结点设置两个指针
– 左指针:指向其前件结点 – 右指针:指向其后件结点
左指针 数据域 右指针 HEAD (a)结点结构 ^ a1 a2

?

an

^

(b)一个非空的双向链表示意图

30

1.4.2 线性链表的基本运算
? ? ? ? ? ? ? ? 插入 删除 合并 分解 逆转 复制 排序 查找

31

1.4.2 线性链表的基本运算
? 1.在线性链表中查找指定元素
– 链表不是随机存取结构 – 从链表的头指针出发,顺着链域next逐个结点 往下搜索,直至搜索到第i个结点为止

? 2.线性链表的插入

32

1.4.2 线性链表的基本运算
? 3.线性链表的删除

? 与顺序存储相比,链表的优点有:
– 插入和删除元素时,不需要移动数据元素,只 需要修改指针即可
33

1.4.3 双向链表
? 双向链表:每个结点设置两个指针
– 左指针:指向其前件结点 – 右指针:指向其后件结点
左指针 数据域 右指针 HEAD (a)结点结构 ^ a1 a2

?

an

^

(b)一个非空的双向链表示意图

34

1.4.4 循环链表及其基本运算
? 循环链表特点:
– 在链表中增加了一个表头结点 – 最后一个结点的指针域指向表头结点,构成了一个环 状链

? 循环链表优点:
– 从任一结点出发来访问表中其他所有结点 – 空表与非空表的运算的统一
35

1.5 栈和队列

36

1.5.1 栈及其基本运算
? 1.栈的定义
– 栈(stack):一种只允许在表的一端进行插入或删除 操作的特殊的线性表 – 栈顶(top) :允许进行插入与删除操作的一端 – 栈底(bottom):不允许插入与删除操作的另一端 – 先进后出(FILO)或后进先出(LIFO)的线性表
入栈 出栈

栈顶

top

an


a2 栈底 bottom a1

37

1.5.1 栈及其基本运算
? 2.栈的顺序存储及其运算 – top=0:栈空 top=m:栈满 – 栈的基本运算 ? 入栈运算 ? 退栈运算 ? 读栈顶元素
V(1..10) 10 9 8 7 6 5 4 3 2 bottom top 1 (a)空栈 bottom top 10 9 8 7 6 5 4 3 2 1 F E D C B A bottom top V(1..10) 10 9 8 7 6 5 4 3 2 1 Y X F E D C B A bottom top V(1..10) 10 9 8 7 6 5 4 3 2 1 X F E D C B A V(1..10)

(b)有6个元素的栈

(c)插入X和Y后的栈

(d)退出Y元素后的栈

38

1.5.1 栈及其基本运算
? 3.栈的链式存储结构——链栈
top 数据域 top an 指针域 栈顶 an an X 栈顶

an-1

an-1

top

an-1

栈顶

?

?

?

a1 (a)链栈

^

栈底

a1 (b)入栈

^

栈底

a1 (c)退栈

^

栈底

39

1.5.2 队列及其基本运算
? 1.队列的定义
– – – – 限定只能在表的一端进行插入和在另一端进行删除操作的线性表 队尾(rear):允许插入的一端 队头(front):允许删除的另一端 先进先出(FIFO)表或后进后出(LILO)线性表
A B C D E F 入队

退队

队头front

队尾rear

– 基本操作
? 入队运算:往队列的队尾插入一个元素,队尾指针rear的变化 ? 退队运算:从队列的排头删除一个元素,队头指针front的变化
40

1.5.2 队列及其基本运算
? 2.循环队列及其运算
– 队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环 状空间,供队列循环使用 – 入队运算 :队尾指针加1,并当rear=m+1时置rear=1 – 出队运算:队头指针加1,并当front=m+1时置front=1
Q(1..8) rear front 8 7 6 5 4 3 2 1 (a)空队列 front rear 8 7 6 5 4 3 2 1 F E D C B A front rear Q(1..8) 8 7 6 5 4 3 2 1 Q(1..8) X F E D C B A Y front rear 8 7 6 5 4 3 2 1 Y Q(1..8) X F E D C B

(b)有6个元素的循环队列

(c)元素X、Y入队后的队列

(d)元素A出队后的队列

41

1.5.2 队列及其基本运算
? 3.队列链式存储结构——链队列
a1 front a1 front a1 a2 front (c)退队 a2 (b)入队 a2

?
(a)链队列

an rear an

^

?

X rear

^

?

an rear

^

42

1.6 树与二叉树

43

1.6 树与二叉树
? 1.树的定义
– 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树 ,否则它满足如下两个条件:
(1)有且仅有一个特定的称为根(Root)的结点; (2)其余的结点可分为m(m≥0)个互不相交的子集T1,T2,T3 ,…,Tm,其中每个子集又是一棵树,并称其为子树。
A

B A E F

C

D

G

H

I

J

K

L

(a)只有一个根结点的树

(b)一般的树

44

1.6 树与二叉树
? 2.树中的基本概念
– 父结点与树的根:每个结点最多只允许有一个前件, 称为该结点的父结点。没有前件的结点中有一个,称 为树的根结点。 – 子结点与叶子结点:在树结构中,每一个结点可以有 多个后件,它们都称为该结点的子结点。没有后件的 结点称为叶子结点。 – 结点的度和树的度:一个结点所拥有后件个数称为该 结点的度。一棵树中各个结点度数的最大值叫做这棵 树的度。 – 层和树的深度:树结构是一种层次结构,根结点为第 一层,根的子结点为第二层,其余各结点的层数逐层 由上而下计算。一棵树中结点的最大层数叫做此树的 深度。
45

1.6.1 树的基本概念
? 树的特点
– – – – (1)树中只有根结点没有前件; (2)除根外,其余结点都有且仅一个前件; (3)树的结点,可以有零个或多个后件; (4)除根外的其他结点,都存在唯一条从根到该结点 的路径; – (5)树是一种分支结构(除根的结点外)每个元素都 有且仅有一个直接前件,有且仅有零个或多个直接后 件。

? 树的存储
– 用多重链表来表示
46

1.6.2 二叉树及其基本性质
? 1.二叉树的定义
– 一个二叉树是n个结点的有限集合(n≥0),此集合或者是空集( n=0),或者是由一个根结点及两棵互不相交的、分别称为左子树 和右子树的二叉树组成,并且左右子树都是二叉树。 – 特点:
? 非空二叉树只有一个根结点; ? 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
A B A D G (a)只有一个根结点的二叉树 (b)深度为4的二叉树 E F C

47

1.6.2 二叉树及其基本性质
? 2.二叉树的性质
– 性质1 在二叉树的第k层上,最多有 2
k ?1

(k ?个结点。 1)

m – 性质2 深度为m的二叉树最多有个 2 ? 1 结点。

– 性质3 在任意一棵二叉树中,度数为0的结点(即叶子结点)总比 度为2的结点多一个。即:

n0 ? n2 ? 1

其中,n0表示度数为0的结点数,n2表示度数为2的结点数。
?1 – 性质4 具有n个结点的二叉树的深度至少为 [log2 n],其 log n 中 [log2 n] 表示取 的整数部分。
2

48

1.6.2 二叉树及其基本性质
? 3.满二叉树和完全二叉树
– 满二叉树:除最后一层外,每一层上的所有结 点都有两个子结点。 – 完全二叉树:除最后一层外,每一层上的结点 数均达到最大值;在最后一层上只缺少右边的 若干结点。
0 1 3 7 8 9 4 10 11 5 12 13 2 6 14 7 3 8 9 (b)完全二叉树 1 4 5 0 2 6

(a)满二叉树

49

1.6.2 二叉树及其基本性质
? 性质5 具有n个结点的完全二叉树深度为
[log2。 ? 1 n]

? 性质6 设完全二叉树共有n个结点,如果从根结点开始, 按层序(每一层从左到右)用自然数1,2,…,n给结点 进行编号,则对于编号为k(k=1,2,…,n)的结点有以 下结论:
①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的 父结点的编号为INT(k/2)。 ②若2k≤n,则编号为k的左子结点编号为2k;否则该结点无左子结点 (显然也没有右子结点)。 ③若2k+1≤n,则编号为k的右子结点编号为2k+1;否则该结点无右 子结点。

50

1.6.3 二叉树的存储结构
? 普通二叉树
– 采用链式存储结构 – 存储结点由两部分组成:数据域与指针域 – 两个指针域:
? 左指针域 ? 右指针域

? 满二叉树与完全二叉树
– 采用顺序存储结构
51

1.6.4 二叉树的遍历
? 二叉树的遍历:不重复地访问二叉树中的所有结点 ? 1.前序遍历(DLR)
– 首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在 遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍 历右子树。

? 2.中序遍历(LDR)
– 首先遍历左子树,然后访问根结点,最后遍历右子树;并且,在 遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后 遍历右子树

? 3.后序遍历(LRD)
– 首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在 遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后 访问根结点。
52

1.6.4 二叉树的遍历
? 前序遍历:
– A、B、D、G、C、E、F
A B D G C F

? 中序遍历:
– D、G、B、A、E、C、F

? 后序遍历:
– G、D、B、E、F、C、A

E

53

1.7 查找技术

54

1.7 查找技术
? 查找(Searching):根据给定的某个值, 在查找表中确定一个其关键字等于给定值 的数据元素。 ? 查找结果:
– 查找成功:找到 – 查找不成功:没找到

? 平均查找长度:查找过程中关键字和给定 值比较的平均次数
55

1.7.1 顺序查找
? 基本思想:
– 从表中的第一个元素开始,将给定的值与表中逐个元 素的关键字进行比较,直到两者相符,查到所要找的 元素为止。否则就是表中没有要找的元素,查找不成 功。

? 平均要与表中一半以上元素进行比较,最坏情况 下需要比较n次。 ? 下列两种情况下只能采用顺序查找:
– 如果线性表是无序表(即表中的元素是无序的),则 不管是顺序存储结构还是链式存储结构,都只能用顺 序查找。 – 即使是有序线性表,如果采用链式存储结构,也只能 用顺序查找。
56

1.7.2 二分法查找
? 思想:先确定待查找记录所在的范围,然后逐步 缩小范围,直到找到或确认找不到该记录为止。 ? 前提:必须在具有顺序存储结构的有序表中进行 。 ? 查找过程:
1)若中间项的值等于x,则说明已查到。 2)若x小于中间项的值,则在线性表的前半部分查找; 3)若x大于中间项的值,则在线性表的后半部分查找。

? 特点:比顺序查找方法效率高。最坏的情况下, 需要比较 log2n次。
57

1.7.2 二分法查找
? 例:查找元素22过程:
1 7 low 2 12 3 18 4 22 5 40 6 56 mid (a)初始状态 1 7 low 2 12 3 18 mid 4 22 5 40 high (b)第一次比较后 1 7 2 12 3 18 4 22 low mid (c)第二次比较后 5 40 high 6 56 7 66 8 79 9 84 10 88 11 94 6 56 7 66 8 79 9 84 10 88 11 94 7 66 8 79 9 84 10 88 11 94 high

58

1.8 排序技术

59

1.8.1 交换类排序法
? 基本思想
– 两两比较待排序记录的关键字,发现两个记录 的次序相反时即进行交换,直到没有反序的记 录为止。

? 方法
– 冒泡排序 – 快速排序

60

1.冒泡排序
? 基本思想
– 对存放原始数据的数组,按从后往前的方向进 行多次扫描,当发现相邻两个数据的次序与排 序要求的“递增次序”不符合时,即将这两个 数据进行互换。这样,较小的数据就会逐单元 向前移动,好象气泡向上浮起一样。

? 性能分析
– 假设线性表的长度n,则在最坏情况下,需要 的比较次数为n(n-1)/2。
61

1.冒泡排序
【 49
38 65 97 76 13 27 49 】 初 始 序 列 13 【 49 38 65 97 76 27 49 】 第 一 趟 排 序 后 13 27 【 49 38 65 97 76 49 】 第 二 趟 排 序 后 13 27 38 【 49 49 65 97 76 】 第 三 趟 排 序 后 13 27 38 49 【 49 65 76 97 】 第 四 趟 排 序 后 13 27 38 49 49 【 65 76 97 】 第 五 趟 排 序 后 13 27 38 49 49 65 【 76 97 】 第 六 趟 排 序 后 13 27 38 49 49 65 76 【 97 】 第 七 趟 排 序 后
62

2.快速排序
? 基本思想
– 任取待排序序列中的某个元素作为基准(一般 取第一个元素),通过一趟排序,将待排元素 分为左右两个子序列,左子序列元素的排序码 均小于或等于基准元素的排序码,右子序列的 排序码则大于基准元素的排序码,然后分别对 两个子序列继续进行排序,直至整个序列有序 。

? 快速排序的平均时间复杂度为O(nlog2n)。
63

2.快速排序
基准元素 初始序列 第1次交换后 第2次交换后 第3次交换后 第4次交换后 【 46 i 【 17 i 【 17 【 17 【 17 i 05 i 05 05 13 13 42 55 i 13 13 42 42 94 94 i j 94 55 55 70 】 70 】 05 j 13 42 94 05 j 55 70 】 j 55 70 】 55 13 42 94 05 17 j 70 】 j 70 】

完成一趟排序 【 17

i j j 42】 46 【94

64

1.8.2 插入类排序法
? 基本思想:
– 每次将一个待排序的记录,按其关键字大小插 入到前面已经排好序的子序列中的适当位置, 直到全部记录插入完成为止。

? 方法:
– 简单插入排序 – 希尔排序

65

1.简单插入排序法
? 基本思想:
– 把n个待排序的元素看成为一个有序表和一个 无序表,开始时有序表中只包含一个元素,无 序表中包含有n-1个元素,排序过程中每次从无 序表中取出第一个元素,把它的排序码依次与 有序表元素的排序码进行比较,将它插入到有 序表中的适当位置,使之成为新的有序表。

? 在最坏的情况下,需要n(n-1)/2次比较。
66

1.简单插入排序法
初始序列 第1趟排序 第2趟排序 第3趟排序 第4趟排序 第5趟排序 第6趟排序 第7趟排序 (38) (65) (97) (76) (13) (27) (49) 【49】 【38 【38 【38 【38 【13 【13 【13 38 49】 49 49 49 38 27 27 65 65 65】 65 65 49 38 38 97 97 97 97】 76 65 49 49 76 76 76 76 97】 76 65 49 13 13 13 13 13 97】 76 65 27 27 27 27 27 27 97】 76 49 49 49 49 49 49 49 97】

67

2.希尔排序
? 基本思想
– 先将整个待排元素序列分割成若干个子序列(由相隔 某个增量h的元素组成的)分别进行直接插入排序,待 整个序列中的元素基本有序(增量足够小)时,再对 全体元素进行一次直接插入排序。因为直接插入排序 在元素基本有序的情况下(接近最好情况),效率是 hi ? n / 2 k (k ? 1,2, ?, [log2 n]) 很高的。 – 增量序列一般取 ,其中n为待排序序 列的长度

O(n1.5 )

? 在最坏情况下,希尔排序的时间复杂度为
68

2.希尔排序
初始序列 49 49 38 38 65 97 76 第1趟排序结果 13 13 27 27 49 第2趟排序结果 第3趟排序结果 13 04 04 13 49 27 38 38 27 49 49 55 55 04 04 49 49 49 55 55 65 65 49 38 38 65 65 97 97 76 76 97
69

65

97

76

13 13

27 27

49

55

04

49 55 04 97 76 76

1.8.3 选择类排序法
? 基本思想:
– 每一趟从待排序的记录中选出关键字最小的记 录,顺序放在已排好序的子序列的最后,直到 全部记录排序完毕。

? 方法:
– 简单选择排序 – 堆排序

70

1.简单选择排序法
? 基本思想:
– 扫描整个线性表,从中选出最小的元素,将它 交换到表的最前面;然后对剩下的子表采用同 样的方法,直到子表空为止。

? 最坏情况下,需要比较n(n-1)/2次。

71

1.简单选择排序法
初始序列 第1趟排序 第2趟排序 第3趟排序 第4趟排序 第5趟排序 第6趟排序 第7趟排序 【49 13 13 13 13 13 13 13 38 【38 27 27 27 27 27 27 65 65 【65 38 38 38 38 38 97 97 97 【97 49 49 49 49 76 76 76 76 【76 49 49 49 13 49 49 49 97 【97 65 65 27 27 38 65 65 65 【97 76 49】 49】 49】 49】 49】 76】 76】 【97】

72

2.堆排序法
? 堆的定义
具有n个元素的序列,当且仅当满足
? hi ? h2 i ? ① 或 ?hi ? h2 i ?1

? hi ? h2 i ② ? hi ? h2i ?1 ?

时称之为堆。①称为大根堆;②称为小根堆 。
70 56 25 15 10 30 25 15 30 70 10 56

(a)大根堆

(b)小根堆

73

2.堆排序法
? 建堆
– 在建堆的过程中,总是将根结点值与左、右子树的根结点值进行 比较,若不满足堆的条件,则将左、右子树根结点值中的大者与 根结点值进行交换。这个调整过程一直做到所有子树均为堆为止 。

? 堆排序
– (1)首先将一个无序序列建成堆。 – (2)然后将堆顶元素(序列中的最大项)与堆中最后一个元素交换( 最大项应该在序列的最后)。不考虑已经换到最后的那个元素,只 考虑前n-1个元素构成的子序列,将该子序列调整为堆。 – 反复做步骤(2),直到剩下的子序列空为止。

? 在最坏情况下,堆排序法需要比较的次数为O(nlog2n)。

74

各种排序法比较

75

典型考题分析

76

? 【例1-1】问题处理方案的正确而完整的描 述称为 。(2005年4月) ? 答案 算法

77

? 【例1-2】算法复杂度主要包括时间复杂度 和 复杂度。(2005年9月) ? 答案 空间

78

? 【例1-3】算法的时间复杂度是指_______ 。
A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数 D)算法程序中的指令条数

? 答案 C

79

? 【例1-4】算法的空间复杂度是指_______ 。
A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)算法执行过程中所需要的存储空间

? 答案 D

80

? 【例1-5】下列叙述中正确的是 2006年9月)

。(

A)一个算法的空间复杂度大,则其时间复杂度也必定大 B)一个算法的空间复杂度大,则其时间复杂度必定小 C)一个算法的时间复杂度大,则其空间可复杂度必定小 D)上述三种说法都不对

? 答案 D

81

? 【例1-6】下列叙述中正确的是 2005年9月)

。(

A)一个逻辑数据结构只能有一种存储结构 B)数据的逻辑结构属于线性结构,存储结构属 于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且 各种存储结构不影响数据处理的效率 D)一个逻辑数据结构可以有多种存储结构,且 各种存储结构影响数据处理的效率

? 答案 D
82

? 【例1-7】数据结构分为逻辑结构和存储结 构,循环队列属于 结构。(2005年9月 ) ? 答案 逻辑

83

? 【例1-8】数据结构分为线性结构和非线性 结构,带链的队列属于 。(2006年9月 ) ? 答案 线性结构

84

? 【例1-9】下列叙述中正确的是______。( 2006年4月)
A)线性链表是线性表的链式存储结构 B)栈与队列是非线性结构 C)双向链表是非线性结构 D)只有根结点的二叉树是线性结构

? 答案 A

85

? 【例1-10】某线性表采用顺序存储结构, 每个元素占4个存储单元,首地址为200, 则第12个元素的存储地址为 。
A)248 B)247 C)246 D)244

? 答案 D
86

? 【例1-11】在长度为n的顺序表的第i( 1≤i≤n+1)个位置上插入一个元素,元素的 移动次数为 。
A)n-i+1 B)n-i C)i D)i-1

? 答案 A
87

? 【例1-12】在一个长度为n的顺序表中,删 除第i(1≤i≤n)个元素时,需要移动的元素 个数为 。
A)n-i+1 B)n-i C)i D)i-1

? 答案 B
88

? 【例1-13】以下描述的中,不是线性表的 顺序存储结构的特征的是 。
A)不便于插入和删除 B)需要连续的存储空间 C)可随机访问 D)需另外开辟空间来保存元素之间的关系

? 答案 D

89

? 【例1-14】下列关于栈的描述中错误的是 ______。(2005年4月)
A)栈是先进后出的线性表 B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底 指针

? 答案 B
90

? 【例1-15】栈和队列的共同点是______。
A)都是先进先出 B)都是先进后出 C)只允许在端点处插入和删除元素 D)没有共同点

? 答案 C

91

? 【例1-16】栈的输入序列为1,2,3,…, n-1,n,输出序列的第1个元素为n,则第 i个输出元素为_________。
A)n-i+1 B)n-1 C)i D)哪个元素无所谓

? 答案 A
92

? 【例1-17】一个队列的入队序列是1、2、 3、4,则队列的输出序列是 。
A)4、3、2、1 B)1、2、3、4 C)1、4、3、2 D)3、2、4、1

? 答案 B

93

? 【例1-18】队列是限定只能在表的一端进 行插入和在另一端进行删除操作的线性表 。允许插入的一端称作_______。 ? 答案 队尾

94

? 【例1-19】下列对于线性链表的描述中正 确的是 。(2005年4月)
A)存储空间不一定是连续,且各元素的存储顺序是任意的 B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C)存储空间必须连续,且各前件元素一定存储在后件元素的前面 D)存储空间必须连续,且各元素的存储顺序是任意的

? 答案 A

95

? 【例1-20】下列叙述中,错误的是



A)线性表是由n个数据元素组成的一个有限序列 B)线性表是一种线性结构。 C)线性表的所有结点有且只有一个前件和一个 后件 D)线性表可以是空表。

? 答案 C

96

? 【例1-21】下列描述的不是链表的优点是 _______。
A)逻辑上相邻的结点物理上不必邻接 B)插入、删除运算操作方便,不必移动结点 C)所需存储空间比线性表节省 D)无需事先估计存储空间的大小

? 答案 C

97

? 【例1-22】某线性表最常用的运算是插入 和删除,插入运算是指在表尾插入一个新 元素。删除运算是指删除表头第一个元素 ,那么采用 存储方式最节省运算时间。
A)仅有尾指针的单向循环链表 B)仅有头指针的单向循环链表 C)单向链表 D)顺序存储

? 答案 A
98

? 【例1-23】一棵二叉树第六层(根结点为 第一层)的结点数最多为 个。(2005年 9月) ? 答案 32

99

? 【例1-24】深度为5的二叉树至多有 _______个结点。
A)16 B)32 C)31 D)10

? 答案 C

100

? 【例1-25】设树T的度为4,其中度为1,2 ,3,4的结点个数分别为4,2,1,1。则T 中的叶子结点为_______。
A)8 B)7 C)6 D)5

? 答案 A
101

? 【例1-26】某二叉树中度为2的结点有18个 ,则该二叉树中有 个叶子结点。(2005 年4月) ? 答案 19

102

? 【例1-27】具有88个结点的二叉树,其深 度至少为______。 ? 答案 7

103

? 【例1-28】在深度为7的满二叉树中,叶子 结点的个数为(2006年4月)
A)32 B)31 C)64 D)63

? 答案 C

104

? 【例1-29】设一棵完全二叉树共有700个结点, 则在该二叉树中有________个叶子结点。
? 答案 350

105

? 【例1-30】对如图1-30所示的二叉树,进 行后序遍历的结果为 。(2006年4月)
A)ABCDEF B)DBEAFC C)ABDECF D)DEBFCA
A B D E F C

? 答案 D

106

? 【例1-31】假设一棵二叉树的后序遍历序 列为DGJHEBIFCA,中序遍历序列为 DBGEHJACIF,则其前序遍历序列为 。
? 答案:ABDEGHJCFI

107

? 【例1-32】对长度为n的线性表进行顺序查 找,在最坏情况下所需要的比较次数为 _____。(2005年4月)
A)log2n B)n/2 C)n D)n+l

? 答案 C
108

? 【例1-33】下列数据结构中,能用二分法 进行查找的是 。(2005年9月)
A)顺序存储的有序线性表 B)线性链表 C)二叉链表 D)有序线性链表

? 答案 A

109

? 【例1-34】已知一个有序表为(13,18, 24,35,47,50,62,83,90,115, 134),当使用二分法查找值为90的元素时 ,查找成功的比较次数为 。
A)1 B)2 C)3 D)9

? 答案 B
110

? 【例1-35】对长度为10的线性表进行冒泡 排序,最坏情况下需要比较的次数为 。 (2006年4月)
? 答案 45

111

? 【例1-36】在排序算法中,两两比较待排 序的记录,当发现不满意顺序要求时,变 更它们的相对位置,这就是 排序。
A)希尔排序 B)交换排序 C)插入排序 D)选择排序

? 答案 B
112

? 【例1-37】设待排序关键码序列为(33,18,9 ,25,67,82,53,95,12,70),要按关键 码值递增的顺序排序,采取以第一个关键码为基 准元素的快速排序法,第一趟排序完成后关键码 33被放到了第_______位置。
A)3 B)5 C)7 D)9

? 答案 B
113

? 【例1-38】对于给定的一组关键字(12,2,16 ,30,8,28,4,10,20,6,18),按照希尔 排序(增量为 5 )算法进行递增排序,第一趟排 序后得到的结果是 。

? 答案 12,2,10,20,6,28,4,16,30,8, 18
114

? 【例1-39】对数据元素序列(49,72,68,13, 38,50,97,27)进行排序,前三趟排序结束时 的结果依次为:第一趟:13,72,68,49,50, 97,27;第二趟:13,27,68,49,38,50, 97,72;第三趟:13,27,38,49,68,50, 97,72。该排序采用的方法是_________。
A)简单插入排序法 B)冒泡排序法 C)简单选择排序法 D)快速排序法

? 答案 C
115

? 【例1-40】以下各组序列中,属于堆的是 _______。
A)19,34,26,97,56,75 B)97,26,34,75,19,56 C)19,56,26,97,34,75 D)19,75,34,26,97,56

? 答案 A

116

? 【例1-41】对于长度为n的线性表,在最坏 情况下,下列各排序法所对应的比较次数 中正确的是_____。(2005年4月)
A)冒泡排序为n/2 B)冒泡排序为n C)快速排序为n D)快速排序为n(n-1)/2

? 答案 D
117



推荐相关:
网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com