第一章 数据结构--简介
总论
程序设计=数据结构+算法
一、基本概念
1、数据(Data)
数据(Data)是信息的载体,它能够被计算机识别、存储和加工处理。它是计算机程序加工的“原料”。例如,一个代数方程求解程序中所用的数据是整数和实数,而一个编译程序或文本编辑程序中使用的数据是字符串。随着计算机软、硬件的发展,计算机应用领域的扩大,数据的含义随之拓广了。例如,当今计算机可以处理图像、声音等,因此他们也属于数据的范畴。
2、数据元素(Data Element)
数据元素(Data Element)是数据的基本单位。有些情况下,数据元素也称为元素、结点、顶点、记录。有时一个数据元素可以由若干个数据项(也可称为字段、域)组成,数据项是具有独立含义的最小标识单位。
3、数据类型(Data Type)
数据类型(Data Type)是具有相同性质的计算机数据的集合及在这个数据集合上的一组操作。如整数,它是[-minint,maxint]区间上整数(maxint是依赖于所使用的计算机及语言的最大整数),在这个整数集上可以进行加、减、乘、整除、取模等操作。
数据类型可以分为原子数据类型和结构数据类型。原子数据类型是由计算机语言提供的,如C语言的整数型、字符型;结构数据类型是借用计算机语言提供的一种描述数据元素之间逻辑关系的机制,由用户自己定义的,如C语言的数组结构等。
4、数据结构(Data Structure)
数据结构(Data Structure)指的是数据之间的相互关系,即数据的组织形式。它一般包括以下三个方面的内容:
- 数据元素之间的逻辑关系,也称为数据的逻辑结构(Data Structure)。
- 数据元素及其关系在计算机存储器内的表示,称为数据的存储结构(Storage Structure)。
- 数据的运算,即对数据施加的操作。
二、逻辑结构
逻辑结构:是指数据对象中数据元素之间的相互关系。有两种分类,一种分为线性结构与非线性结构;另一种分为集合结构、线性结构、树形结构和图形结构。
1、线性结构
线性结构的逻辑特征是:有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性表,栈,队列,串都是线性结构。
2、非线性结构
非线性结构的逻辑特征是一个结点可能有多个直接前趋和直接后继。多维数组,广义表,树,图都是非线性结构。
3、集合结构
**集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系。**各个数据元素是“平等”的,它们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合。
4、线性结构
线性结构:线性结构中的数据元素之间是一对一的关系。
5、树形结构
树形结构:树形结构中的数据元素之间存在一种一对多的层次关系
6、图形结构
图形结构:图形结构的数据元素是多对多的关系
三、存储结构(物理结构)
存储结构:是指数据的逻辑结构在计算机中的存储形式。
分为顺序存储结构、链式存储结构、索引存储结构、散列存储结构。
1、顺序存储结构(Sequential Storage Structure)
**顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。**通常顺序存储结构是借助于程序语言的数组来描述的。该方法主要应用于线性的数据结构,非线性的数据结构也可以通过某种线性化的方法来实现顺序存储。
2、链式存储结构(Linked Storage Structure)
**链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。**该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
3、索引存储方法
该方法通常是在存储结点信息的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),关键字是能唯一标识一个结点的那些数据项。若每个结点在索引表中都有一个索引项,则该索引表称为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(Sparse Index)。稠密索引中索引项地址指出结点所在的存储位置,而稀松索引中索引项的地址则指示一组结点的起始存储位置。
4、散列存储结构
该方法的基本思想是根据结点的关键词直接计算出该结点的存储地址。
四、数据的运算
因为数据的运算时通过**算法(Algorithm)**描述的,所以讨论算法是数据结构课程的重要内容之一。后边会讨论。
五、总结
结构 | 逻辑存储结构 | 物理存储结构 | 数据的运算 |
---|---|---|---|
线性表 | 线性表 | ||
顺序表 | 线性表 | 顺序存储 | |
链表 | 线性表 | 链式存储 | |
散列表 | 线性表 | 散列存储 | |
栈 | 线性表 | 插入、删除运算限制在表的一端 | |
队列 | 线性表 | 插入在一端,删除在另一端 | |
顺序栈 | 线性表 | 顺序存储 | 插入、删除运算限制在表的一端 |
链栈 | 线性表 | 链式存储 | 插入在一端,删除在另一端 |
顺序队列 | 线性表 | 顺序存储 | 插入、删除运算限制在表的一端 |
链队列 | 线性表 | 链式存储 | 插入在一端,删除在另一端 |