一、定义
- 程序=数据结构+算法
- 数据结构是一门研究数据组织方式的学科
- 有了编程语言也就有了数据结构,数据结构是程序编写更加优美,更加有效率的基石
- 数据结构是算法的基础,换言之,想要学好算法,需要把数据结构学到位
二、结构
分为:线性结构与非线性结构
线性结构
- 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的关系
- 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。
- 顺序存储的线性表称为顺序表,顺序表中的元素是连续存储
- 链式存储的线性表称为链表,链表存储的元素不一定连续,元素节点中存放数据元素以及相邻元素的地址值
- 常见的有:数组、队列、链表、栈
非线性结构
- 数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系
- 树结构中数据元素之间存在一对多的关系
- 图结构中数据元素之间存在多对多的关系
- 常见的有:二维数组、多维数组、广义表、树结构、图结构
三、实现
线性结构
- 顺序存储结构(静态生成内存空间)
- 数组
- 优势
- 数组是一种常见的存放数据的方式
- 数组是按照下标进行元素的存取,速度快
- 劣势
- 需要数组元素删除后仍是顺序,操作量大
- 不根据下标查询数据,操作量大
- 优势
- 队列
- 队列的基本思想是:先进先出
- 队列是一个有序列表,可以用数组或是链表实现
- 存在两个指针头指针和尾指针,头指针进行出队操作,尾指针进行入队操作
- 优势:存取方便、
- 劣势:不适合查询、空间浪费、删除、插入不便
- 环形队列
- 基本思想与队列相同,对队列进行优化
- 使用一个空位置,来对出队入队操作取模
- 优势:存取方便、将出队的空间利用
- 劣势:长度相对固定(可以完善)、不适合查询
- 数组
- 链式存储结构(动态生成内存空间)
- 单链表
- 以节点方式存储,节点中包含数据和下一个节点地址值
- 实现方式有带头结点和不带头节点
- 优势:存储空间动态生成、存取方便、删除、插入方便
- 劣势:不适合查询
- 双向链表
- 基本思想与单链表相同,优化了查询
- 实现方式节点包含数据、上一个节点、下一个节点的地址值
- 优势:删除操作上不用依靠赋值节点,可以双向查询
- 劣势:增大了存储空间
- 单链表
栈
- 定义:
- 栈是一个先入后出(FILO-First In Last Out)的有序列表
- 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除一端为栈顶,另一端为固定的称为栈底
- 最先进入的元素最后出去,最后进的元素最先出去
- 实现:可以使用队列,链表来实现