数据结构
线性结构
数组
- 数据元素紧密的排列到一起,
- 在物理上还是逻辑上都是--连续不中断
- 有固定的长度的
- 数组的头地址和数组的长度以及数组的元素大小
- int a[] =new int[100]; 00000000
栈
- 先进后出
- 入栈的顺序是abcde 不可能出栈的顺序是什么
- 双栈实现一个队列
- 实现一元多项式的运算
队列
- 先进先出
约瑟夫环
- 隔n出1
- 最后活下来的才是王者
链表
- 逻辑上也是连续的
- 物理上可以不连续
- 单链表
- 仅有一个向后的指针
- 还有数据域
- 有序的单链表
- 更新操作=先删除后插入
- 更新操作=先删除后插入
- 双链表
- 还有一个向前的指针
- 还有一个向前的指针
- 数据长度不固定
树
树的概念
- 根节点是没有父节点
- 除了根节点的其他所有节点有且仅有一个父节点
二叉树的遍历
- 深度优先
- 前序(根)遍历
- 中序(根)遍历
- 后序(根)遍历
- 广度优先
- 层次变量
搜索二叉树
- 左侧比根小
- 右侧比根大
- 所以数据是有序的
平衡二叉搜索树/平衡二叉树
- 任意一个节点的左右子树的高度差不大于1
- 平衡二叉树的平衡
- O(logn) 有序的数组做二分查找
红黑树
完全二叉树
* 除了最后一层是满的
* 最后一层要从左往右依次填充数据
* 平衡的二叉树
* 无序
满二叉树
* 圆满
* 除了最后一层是叶子节点之外 无其他叶子节点
* 平衡的二叉树
* 无序
哈夫曼树
01 a 300
10 b 200
11 c 100
00 d 50
一定要有 对各个字出现的频次的统计 由高到低 做好排序
多叉树
B树
图
图的概念
- 每个数据元素可以多个前驱节点(元素)和后续节点(元素)
有向图
- 无权图
- 有权图
无向图
- 有权图
- 无权图
邻接矩阵
邻接表存储
深度优先
广度优先
数据的存储结构
顺序存储
- 用连续的内存单元来存储数据
链式存储
- 使用若干地址分散的来存储数据
- 用指针来记录前驱或后继元素的地址
- 有单独一块来存储数据
数据结构的常见操作
- 初始化
- 判空
- 统计元素个数
- 判断是否包含某个元素
- 按照某种顺序依次访问所有元素
- 获得指定的元素值
- 设置指定的元素值
- 插入指定元素
- 删除指定元素
- 查找指定元素