数据结构(严蔚敏)课件第1章

【学习目标】

熟悉各名词、术语的含义,掌握基本概念。理解算法五个要素的确切含义。掌握计算语句频度和估算算法时间复杂度的方法。

【重点和难点】

本章讨论的都是一些基本概念,因此没有难点,重点在于了解有关数据结构的各个名词和术语的含义,以及语句频度和时间复杂度、空间复杂度的估算 。

【知识点】

数据、数据元素、数据结构、数据类型、抽象数据类型、算法及其设计原则、时间复杂度、空间复杂度。

【学习指南】

1. 熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。

2. 了解抽象数据类型的定义、表示和实现方法。

3. 熟悉类C语言的书写规范,特别要注意值调用和引用调用的区别,输入、输出的方式以及错误处理方式。

4. 理解算法五个要素的确切含义和对算法正确性的理解。

5. 掌握计算语句频度和估算算法时间复杂度的方法。

1.1   数据结构讨论的范畴

1.2   基本概念

1.3   算法和算法的量度

1.1 数据结构讨论的范畴

Niklaus Wirth:   Algorithm   Data Structures = Programs

程序设计: 算法:     数据结构:

为计算机处理问题编制          一组指令集

处理问题的策略

问题的数学模型

结构静力分析计算

例如: 数值计算的程序设计问题

─━ 线性代数方程组

─━ 环流模式方程      (球面坐标系)

全球天气预报

非数值计算的程序设计问题

例一: 求一组(n个)整数中的最大值

算法: ? 模型:?

基本操作是“比较两个数的大小”

取决于整数值的范围

例二:计算机对弈

算法:? 模型:?

对弈的规则和策略

棋盘及棋盘的格局

例三:足协的数据库管理

算法:? 模型:?

需要管理的项目? 如何管理? 用户界面?

各种表格

概括地说:

数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。

1.2  基本概念

一、数据与数据结构

二、数据类型

三、抽象数据类型

一、数据与数据结构

所有能被输入到计算机中,且能被计算机处理的符号的集合。

数据:

是计算机操作的对象的总称。

是计算机处理的信息的某种特定的符号表示形式。

是数据(集合)中的一个“个体”

数据元素:

是数据结构中讨论的基本单位

数据对象是性质相同的数据元素的集合        是数据的子集

数据项:

是数据结构中讨论的最小单位

数据元素可以是数据项的集合

例如:

描述一个运动员的数据元素可以是

称之为组合项

数据结构:

带结构的数据元素的集合

假设用三个 4 位的十进制数表示一个含 12 位数的十进制数。

3214,6587,9345 ─ a1(3214),a2(6587),a3(9345)

则在数据元素 a1、a2 和 a3 之间存在着“次序”关系  ?a1,a2?、?a2,a3?

3214,6587,9345  a1         a2        a3

6587,3214,9345  a2         a1        a3

例如:

又例,在2行3列的二维数组{a1, a2, a3, a4, a5, a6} 中六个元素之间 存在两个关系:

行的次序关系: 列的次序关系:

row = {,,,}

col = {,,}

a1  a3  a5 a2  a4  a6

a1  a2  a3 a4  a5  a6

再例,在一维数组 {a1, a2, a3, a4, a5, a6} 的数据元素之间存在如下的次序关系:

{| i=1, 2, 3, 4, 5}

或者说,数据结构是相互之间存在着某种关系的数据元素的集合。

可见,不同的“关系”构成不同的“结构”

数据结构包括以下几个方面:

数据元素之间的逻辑关系,即逻辑结构 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构 施加在该数据上的操作,即数据的运算

数据的逻辑结构可归结为以下四类:

线性结构

树形结构

图状结构

集合结构

数据结构的形式定义为:

数据结构是一个二元组

Data_Structures = (D, S)

其中:D 是数据元素的有限集,     S 是 D上关系的有限集。

数据的存储结构(物理结构)

—— 逻辑结构在存储器中的映象

“数据元素”的映象  ?

“关系”的映象  ?

数据元素的映象方法:

用二进制位(bit)的位串表示数据元素

(321)10  =  (501)8  =  (101000001)2

关系的映象方法:

(表示?x, y?的方法)

顺序映象(顺序存储方法)

以相对的存储位置表示后继关系

例如:令 y 的存储位置和 x 的存储位置之间差一个常量 C

而 C 是一个隐含值,整个存储结构中只含数据元素本身的信息

x

y

链式映象(链式存储方法)

需要用一个和 x 在一起的附加信息指示 y 的存储位置

y     x

不要求在逻辑上相邻的结点在物理位置上也相邻,结点间的逻辑关系由附加 的指针字段表示。

索引存储方法        存储结点信息的同时,建立附加的索引表。    索引表中的每一项称为索引项,索引项的一般形式是关键字与地址。 散列(或哈希)存储方法        根据结点的关键字通过散列函数直接计算出一个值,并将这个值作为该结点的存储地址。

在不同的编程环境中,

存储结构可有不同的描述方法。

当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。

例如:

以三个带有次序关系的整数表示一个长整数时,可利用 C 语言中提供的整数数组类型。

typedef int Long_int [3]

定义长整数为:

二、数据类型

在用高级程序语言编写的程序中, 必须对程序中出现的每个变量、 常量或表达式,明确说明它们所       属的数据类型。

例如,C 语言中提供的基本数据类型有:

整型   int

浮点型   float

字符型   char

逻辑型   bool  ( C  语言)

双精度型  double

实型( C  语言)

数据类型 是一个 值的集合 和定义在此集合上的 一组操作 的总称。

不同类型的变量,其所能取的值的范围不同,所能进行的操作不同。

三、抽象数据类型   (Abstract Data Type 简称ADT)

是指一个数学模型以及定义在此数学模型上的一组操作。

例如,抽象数据类型复数的定义:

数据对象:       D={e1,e2|e1,e2∈RealSet  }   数据关系:       R1={| e1是复数的实数部分                       | e2 是复数的虚数部分 }