一、什么是数据结构
1、 数据结构的起源:1968年美国的高纳德教授开创了一门新的课程《基本算法》,确定了数据结构和算法的基本体系。是一门研究非数值计算的学科,专注于数据的关系及操作。
程序=数据结构+算法
2、 数据结构的基本概念
数据:所有能输入到计算机中的去描述客观事物的符号
数据项:有独立含义的数据的最小单位
数据元素:数据的基本单位,也称为节点或记录
数据结构:数据元素+数据关系组成的集合
算法:
狭义上来说数据结构所具有的功能。
广义上来说算法是解决问题的方法
3、 数据结构的三个方面
数据的逻辑结构
数据的存储结构
数据结构的运算
二、四种基本的逻辑结构
集合结构:数据元素之间除了同一属一个集体外,没有关系(重要性低)
线性结构:数据元素之间存在一对一关系
树型结构:数据元素之间存在一对多关系
图型结构:数据元素之间存在多对多关系
三、数据结构的存储方式
1、顺序存储
数据存在一段连续的空间,用数据元素在存储器的位置来表示数据元素的关系
优点:可能随机访问,访问效率极高
缺点:空间利用率低,对内存的要求高(必须使用整块的内存),元素添加删除不方便
2、链式存储
结构中的每个元素存储在彼此独立的内存,每个元素中增加一个或多个数据项用来存放另一个元素的地址,用来表示数据元素之间的关系
优点:插入删除元素方便,空间利用率高,对内存的要求低
缺点:只能逐个遍历,不能随机访问,查询效率低
注意:每种逻辑结构采用什么物理结构实现,没有明确规定,通常根据实现的难易程度,以及在时间和空间复杂度的要求,选择合适的物理结构,也有可能是顺序和链式混合存储
线性结构(表):
顺序
链式
栈:是一种功能受限的线性表,只有一个端口用于元素的进出
特点是先进后出(后进先出),为函数的调用提供支持、常用于对数据的管理、表达解析
顺序栈、链式栈
队列:是一种功能受限的线性表,有两个端口进出元素,一个端口只能入队,另一个端口只能出队
特点是先进先出,常用于人物排队,如:数据池、生成者与消费者模型,树的层序遍历,图的遍历
顺序队列、链式队列
链表(链式表):元素分散存储在内存中任意位置,元素中有一个数据项用来记录下一个元素的地址(单向链表),如果元素中有两个
树:
树的种类型
普通树
二叉树
有序二叉树
图:图的总类:有向图、无向图
图的实现、遍历
算法:
查找
排序
分治
背包
时间复杂度、空间复杂度