一、数据结构基本概念
(一)数据、数据对象、数据元素、数据项的基本概念
- 数据:即所有能输入到计算机中去的描述客观事物的符号,比如图片声音等…
- 数据对象:相同性质的数据元素的集合,即数据的一个子集。
- 数据元素:是数据的基本单位,也称结点或记录。例如:一个学生表中学生的具体信息。
- 数据项:有独立含义的数据最小单位,组成数据元素。
图解
数据 > 数据对象 > 数据元素 > 数据项
(二)数据结构的两个层次:逻辑机构和存储结构
-
逻辑结构
-
集合:数据元素之间无其他关系,仅仅属于统一集合而已。
-
线性结构:数据元素之间存在一一对应的线性关系,其开始结点和终端结点具有唯一性,除了开始结点和终端结点,其他数据元素有且仅有一个前驱结点和后继结点,如:线性表、栈、队列、串、数组。
-
树形结构:又称非线性结构,数据元素之间存在一对多的层次关系,每个数据元素有且仅有一个前驱结点,但却有很多后继结点,终端结点可不唯一,如:二叉树、红黑树等。
-
图形结构:又称非线性结构,数据元素之间存在多对多的任意关系,其前驱结点和后继结点个数可以是任意多个。
四种逻辑结构存在的关系:树形结构是图形结构的特殊形式,线性结构是树形结构的特殊形式。
-
-
存储结构
-
顺序储存结构:
把逻辑上相邻的数据存储在物理位置上相邻的存储单元里,用物理位置的相邻来体现逻辑上的相邻。通常借助于程序设计语言的数组来实现。此种存储方式的优点在于存储空间利用率较高,所分配的给数据存储的单元完全用于了数据储存,数据之间的逻辑关系没有占有存储空间。缺点在于不便于对数据的修改,要对数据插入和删除可能要移动一系列的数据。
-
链式储存结构:
逻辑上相邻的数据存储在物理位置不相邻的存储单元里,通过添加指针来标识数据之间书否相邻。通常借助程序设计语言的指针类型来实现,优点在于不要求物理上的相邻,所以在进行插入、删除等操作时,只需改变相邻结点的指针域,而无需移动数据位置 。缺点在于存储空间利用率较低。
-
索引储存结构:
该结构存储数据时建立附加的索引表,索引表中的每一项称之为索引项(关键字,地址),关键字唯一标识一个数据元素,地址是指向该元素的指针。采用了索引的存储结构可以所及存取数据元素,在进行插入,删除等时,只需要移动相应索引表中的地址,不必移动数据,故而大大提高了数据的查找速度,缺点在于添加了索引表,降低了存储空间的利用率。
-
散列(哈希)储存结构:
根据数据元素的关键字通过哈希函数计算出一个数值用作该数据元素的存储地址。优点在于查找速度快,只需要给出关键字可立即计算出该数据元素的地址,缺点则是指存储数据元素不存储数据之间的逻辑关系,只适合进行快速查找和插入的场合。
-
(三)数据类型和抽象数据类型的表示方法与实现
数据类型:指一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。
抽象数据类型:指一个数据模型以及定义在此数据模型上的一系列操作,不考虑计算机内部的具体存储结构与具体实现算法。
抽象数据类型的定义举例:
ADT 抽象数据类型名
{
Data
数据对象的定义
数据元素之间的逻辑关系
Operation
操作1
初始条件
操作结果描述
操作2
初始条件
操作结果描述
······
}ADT 抽象数据类型名