数据结构概述
一、数据结构的研究内容
用计算机解决一个问题的步骤:
1.具体问题抽象为数学模型
实质:
(1)分析问题
(2)提出操作对象
(3)找出操作对象之间的关系
(4)用数学语言描述 =>(数据结构)
2.设计算法
3.编程、调试、运行

二、基本概念
1、数据
能输入计算机且能被计算机处理的各种符号的载体
(1)信息的载体 (2)是对客观事务符号化的表示 (3)能够被计算机识别、存储和加工
包括:
数值型的数据:整数、实数等
非数值型的数据:文字、图像、图形、声音等
2、数据元素
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理
类似于数据库表中的一行(元组)
也简称为元素,或称为记录、节点或顶点
3、数据项(Data Item)
一个数据元素可由若干个数据项组成
数据项构成数据元素的不可分割的最小单位
数据、数据元素、数据项三者之间的关系:
数据 > 数据元素 > 数据项
例:学生表 >个人记录>学号、姓名。。。
4、数据对象(Data Object)
是性质相同的数据元素的集合,是数据的一个子集
例如:整数数据对象是集合N={0,+-1,...}、字母字符、学籍表
数据元素与数据对象:
数据元素是组成数据的基本单位,与数据的关系是集合的个体
数据对象是性质相同的数据元素的集合,与集合的关系是集合的子集
三、数据结构的基本概念
数据元素不是孤立存在的,它们之间存在某种关系,数据元素互相之间的关系成为结构(Structure)
是指互相之间存在一种或多种特点关系的数据元素集合
或者说,数据结构是带结构的数据元素的集合
1、数据结构包括以下三个方面的内容:
1、数据元素之间的逻辑关系,也称逻辑结构
2、数据元素及其关系在计算机内存中的表示(又称为映像),称为数据的物理结构或数据的存储结构
3、数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应存储结构上的实现
2、数据结构的两个层次:

2.1逻辑结构的种类
划分方法一
(1)线性结构(1:1关系)
有且仅有一个开始和终端节点,并且所有节点都最多只有一个直接前趋和一个直接后继。
例如:线性表、栈、队列、串
(2)非线性结构(1:N、N:1、M:N关系)
一个节点可能有多个直接前趋和直接后继
例如:树、图
划分方式二--四类基本逻辑结构
(1)集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。
(2)线性结构:结构中的数据元素之间存在一对一的线性关系
(3)树形结构:结构中的数据元素之间存在一对多的层次关系
(4)图状结构或网状结构:结构中的数据元素之间存在多对多的任意关系
2.2存储结构的种类
四种基本存储结构:
1、顺序存储结构 2、链式存储结构 3、索引存储结构 4、散列存储结构
(1)顺序存储结构
用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示
例如数组实现的顺序存储结构
(2)链式存储结构
用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针(地址)来表示
(3)索引存储结构
在存储节点信息的同时给hi,还简历附加的索引表
实际上是一个目录,如手机通讯录
(5)索引存储结构
根据节点的关键字直接计算出该节点的存储地址
四、数据类型和抽象数据类型
一些最基本的数据结构可以用数据类型来实现,如数组、字符串等;
而另一些常用的数据结构。如栈、队列、树、图等,不能直接用数据类型来表示。
1、数据类型的作用
约束变量或常量的取值范围
约束变量或常量的操作
2、数据类型(Data Type)
数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称
数据类型=值的集合+值集合上的一组操作
3、抽象数据类型(Abstract Data Type:ADT)
是指一个数学模型以及定义在此数学模型上的一组操作(相关运算)
3.1抽象数据类型的形式定义
抽象数据类型可用(D,S,P)三元组表示
其中:D是数据对象;
S是D上的关系集;
P是D的基本操作集。
一个抽象数据类型的定义格式如下:
ADT 抽象数据类型名{
数据对象:< 数据对象的定义>
数据关系:< 数据关系的定义>
基本操作:< 基本操作的定义>
}ADT 抽象数据类型名

基本操作定义格式说明:
参数表:
赋值参数 只为操作提供输入值
引用参数 以&打头,除可提供输入值外,还将返回操作结果
初始条件:描述操作执行之间数据结构和参数应满足的条件,若不满足,则操作失败,并返回响应出错信息。若初始条件为空,则省略之。
操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果
五、算法与算法分析
1、算法的定义
对特定问题求解方法和步骤的一种描述,是指令的有限序列。其中每个指令表示一个或多个操作。
简而言之,算法就是解决问题的方法和步骤
2、算法的描述
自然语言:英语、中文
流程图:传统流程图、NS流程图(盒图)
伪代码:类语言:类C语言
程序代码:C语言程序、JAVA语言程序
3、程序
是用某种程序设计语言对算法的具体实现程序=数据结构+算法
4、算法的特性:一个算法必须具有五个重要特性
(1)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成
(2)确定性:算法每一条指令必须由确切含义,没有二义性
(3)可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现
(4)输入:一个算法由零个或多个输入
(5)输出:一个算法由一个或多个输出
5、算法设计的要求
(1)正确性
(2)可读性
(3)健壮性(鲁棒性)
(4)高效性
6、算法效率
算法效率主要通过以下两个方面来考虑:
(1)时间效率:指的是算法所耗费的时间;
(2)空间效率:指的是算法执行过程中所耗费的存储空间
时间效率和空间效率有时候是矛盾的。
6.1算法时间效率的度量
算法时间效率可以用根据该算法编制的程序在计算机上执行所消耗的时间来度量
两种度量方法:事后统计、事前分析(推荐)


分析算法时间复杂度的基本方法:
定理1.1:若f(n)=amnn+am-1nm-1+...+a1n+a0是m次多项式,则T(n)=O(nm)
时间复杂度是由嵌套最深层语句的频度决定的


浙公网安备 33010602011771号