数据结构第一天
一、什么是数据结构
-
数据结构的起源
1968年, 美国高德纳教授,《计算机程序设计艺术》第一卷《基本算法》,开创了数据结构和算法的先河,
数据结构是研究数据之间的关系和操作的学科,而非计算方法,美国沃斯提出的 “数据结构+算法=程序”,揭示了程序的本质
-
数据结构相关概念
什么是数据:
所有能够输入到计算机中能够被程序处理的描述客观事实的符号
数据项:有独立含义的数据的最小单位,也称为域
数据元素:组成数据的有一定含义的基本单位,也叫做结点,节点,记录
数据结构:相互之间存在一种或者多种特定关系的数据元素的集合
算法(algorithm):数据结构中所具备的功能,能够解决某种特定问题的方法
-
数据结构的三个方面
- 数据的逻辑关系
- 数据的存储关系
- 数据结构的运算
二、数据结构的逻辑和存储关系
逻辑关系:
根据逻辑关系可以分为:集合,线性结构,树形结构,图形结构
集合:数据元素同属于同一个集体,但元素之间没有任何关系
线性结构:数据结构之间存在一对一的关系
树形结构:数据之间存在一对多关系
图形结构:数据之间存在多对多的关系
存储(物理关系):
根据存储关系可以分为顺序结构和链式结构
顺序结构:数据元素存储在连续的内存中,用数据元素的相对位置来表示关系
优点:支持随即访问,访问查找效率极高,适合用于查找数据频繁的结构。
缺点:对插入和删除时效率低,操作不方便,内存的空间利用率低,要求高
链式结构:数据元素存储在彼此相互独立的内存空间中,每个独立的元素也叫做节点,每个节点中增加一项数据项用于存储其他相关节点的地址,以此表示节点之间的关系
优点:空间利用率极高,对内存的要求不高,插入,删除更方便
缺点:不支持随机访问,只能从头到尾逐个访问
具体采用哪种结构需要根据实现难度,空间时间要求,操作习惯等方面综合考虑选择合适的结构
三、数据结构的运算
通常,一般的数据结构都可能包含以下的运算,有些结构不会有相关的运算。
- 创建数据结构 create
- 销毁数据结构 destroy
- 清空数据结构 clear
- 数据结构排序 sort
- 插入元素 insert
- 删除元素 delete
- 修改元素 modify
- 查询元素 query
- 访问元素 access
- 遍历元素结构 show / ergodic / print
四、顺序表和链式表实现
顺序表
顺序表的数据项如下:表的容量,数据元素的连续内存的首地址,当前元素的数量;顺序表的运算有:创建,销毁,清空,插入,删除,访问,查询,修改,排序,遍历等等。
在编写相关功能函数时,需要注意:1. 要保持数据元素的连续性 2.不要越界
链式表(list):
元素(节点)的数据项如下:1、数据域:可以是任意类型的若干数据项。2、指针域:指向下一个节点
由若干个节点通过指针域链接到一起就成了链表
不带头结点的单链表:
第一个节点的数据域存储的是有效数据,
缺点:添加删除节点时,可能会修改第一个节点的指针,参数需要使用二级指针才能够达到更改指针指向的目的,比较麻烦。
带头结点的单链表:
第一个节点的数据域不存储有效元素,仅仅只是使用它的指针域永远指向链表的第一个数据有效的节点
优点:添加,添加时会比不带头节点的链表更方便
注意:其他操作要从头节点的下一个节点开始
今天算是c语言的结束,数据结构的开端了,接下来我会将各个数据结构都进行代码实现并附上源码,敬请期待……
所有数据结构代码:点击跳转