1. 算法 + 数据结构 = 程序
问题(problem):从输入到输出的一种映射函数
数据结构(Data Structure):逻辑数据结构在计算机中的存储表达,支持相应的操作
算法(algorithhm):对特定问题求解过程的描述方法
程序(program):算法在计算机程序设计语言中的实现
2.层次
逻辑结构:
(1).线性表、栈和队列、字符串
(2).二叉树、树、图
运算:
(1).内排序、文件管理、外排序
(2).检索、索引
扩展:
高级数据结构
3.问题求解
(1).编写计算机程序的目的:解决实际的应用问题
(2).问题抽象:分析和抽象任务需求,建立问题模型
(3).数据抽象:确定恰当的数据结构表示数学模型
(4).算法抽象:在数据模型的基础上设计合适的算法
(5).数据结构+算法,进行程序设计:模拟和解决实际问题
4.什么是数据结构
(1)结构:实体和关系
(2)数据结构:
- 按照逻辑关系组织起来的一批数据
- 按一定存储方法把它存储在计算机中
- 在这些数据上定义一个运算的集合
- 数据的逻辑结构:线性表 ⊆ 二叉树 ⊆ 树 ⊆ 图
- 数据的存储结构:顺序方法、链接方法、 索引方法、散列方法
- 数据的运算:增、删、查、改、 排序、检索
(3)数据结构的逻辑组织
线性结构:线性表(表、栈、队列、串等)
非线性结构:树(二叉树、Huffman树、二叉检索树等) 图(有向图、无向图等)
(4)数据的存储结构
逻辑结构到物理存储空间的映射
计算机主存储器(内存)
- 非负整数地址编码,相邻单元的集合
- 基本单元是字节
- 按地址随机访问
- 访问不同地址所需时间基本相同
顺序方法
用一块连续的存储区域存储数据称为
顺序存储
顺序存储把一组结点存储在按地址相邻的顺序存储单元里,结点间的逻辑后继关系用
存储单元的自然顺序关系来表达
顺序存储结构称为
紧凑存储结构,其紧凑性是指它的存储空间除了存储有用数据外,没有用于存储其他附加的信息
紧凑性可以用“
存储密度”来度量:它是一个存储结构所存储的“有用数据”和该结构(包括附加信息)整个存储空间大小之比
有时为了“
用空间换取时间”,在存储结构中存储一些附加信息还是很必要的。譬如,用于提高算法的执行速度,或者让算法实现更为简便等
链接方法
链接方法
利用指针,在结点的存储结构中附加指针字段称为
链接法。两个结点的逻辑后继关系
用指针来表达
任意的逻辑关系r,均可使用这种指针地址来表达。一般的做法是将数据结点分为两部分:
一部分存放结点本身的数据,称为
数据字段
一部分存放指针,称
指针字段,链接到某个后继结点,指向它的存储单元的开始地址。多个相关结点的依次链接就会形成
链索
对于经常增删结点的复杂数据结构,顺序存储往往会难以应付,而链接方法结合动态存储为这些复杂问题提供了解决方法
缺点:
为了访问结点集 K 中某个结点,必须用该结点的存储指针
当不知道结点指针时,为了在结点集 K中寻找某个符合条件的结点,就要沿着链接结点的链索,按结点逐个比较搜索,得花费相当可观的时间
索引方法
索引方法
顺序存储法的一种推广,也使用
整数编码来访问数据结点位置
建造一个由整数域Z 映射到存储地址域D 的函数 Y:Z→D,把
结点的整数索引值z∈Z 映射到
结点的存储地址d∈D。Y称为
索引函数
为了构造任意的索引函数,可为索引函数提供附加的存储空间,称为
索引表
S
索引表中每一元素是指向数据结点的指针。因为索引表S 由等长元素(指针)组成,故可进行线性的索引计算:
始址(元素S[i]) =始址(元素S[0]) +i ·(指针尺寸)
通过上述公式,由索引号i 可以计算出索引表中的单元S[i]的始址,再通过读出S[i]元素的内容(指针),访问真正需要访问的数据结点
索引方法付出了存储的开销,其数据结点要附加用于指针的存储空间