大话数据结构-摘要
阅读《大话数据结构》一书,总结下来一些东西;总结的比较粗,部分思想暂时理解不了,先放一放,后面通过学习其他的东西后,再回过头来消化这些知识点
1、数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合
数据的逻辑结构
1.集合结构
属于同一集合,元素平等
2.线性结构
元素一对一
3.树状结构
元素一对多的层次关系
4.图状结构
元素多对多
数据的物理结构
1.顺序存储
元素存放在地址连续的存储单元,数据逻辑关系与物理关系一致
2.链式结构
把数据存在任务任意的 存储单元中,地址连不连续都可以;通过指针找到相关联的数据位置
2、时间算法复杂度
推导方法
1.用常数1取代时间中的所有加法常数
2.修改的次函数中,只保留最高阶
3.如果最高阶存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶
- 常数阶 O(1)
int sum = 0,n=100; //执行一次
sum = sum+n; //执行一次
System.out.printf(sum); //执行一次
O(1)
- 线性阶 O(n)
- 对数阶 Ologn
- 平方阶 O(n²)
3、线性表
- 顺序存储结构
存储位置连续,插入慢,查找快(下标查找)
- 链式存储结构
- 单链表
- 静态链表
- 循环链表
- 双向循环链表
查找慢,插入删除块;空间换时间
4、栈与队列
- 栈
栈是限定仅在队尾进行插入和删除操作的线性表
作用:递归
应用:四则运算表达式求值(后缀表达式)
- 队列
队列是只允许在一端进行插入操作,另一端进行删除操作的线性表
5、串
串是由0个或多个字符组成的有限序列,又叫字符串
- KMP匹配算法
6、树
- 深度
树中节点的最大层次,称为树的深度或高度
- 表示方法
双亲表示法、孩子表示法、孩子兄弟表示法
- 二叉树
1.每个节点最多有两颗子树,二叉树中不存在度大于2的节点
2.左右字数是有顺序的,不能颠倒
3.只有一颗子树,也要区分是左子树还是右子树
五种基本形态
1.空二叉树
2.只有一个根节点
3.根节点只有左子树
4.根节点只有右子树
5.根节点既有左子树又有右子树
- 特殊二叉树
1.斜树
2.满二叉树(左右节点数量完全相等)
3.完全二叉树(在某一层上,左右节点数量相等)
- 二叉树遍历方法
1.前序
从根节点开始,先左边后右依次遍历
2.中序
从最左边节点开始,先遍历根节点,后遍历右边节点
3.后序
从最左边节点开始,先遍历右边节点,最后遍历根节点
4.层序遍历
从根节点开始,逐层从左到右遍历
-
树的应用
赫夫曼树 带权路径长度WPL最小的二叉树称为赫夫曼树 赫夫曼编码-压缩
7、图-Graph
图是由顶点的有穷非空集合的顶点之间边的集合组成,通常表示为: G(V,E), 其中G是一个图,V是图G中顶点的结婚,E是图G中边的集合
图中的一些定义
-
图中数据元素称为顶点(Vertex)
-
图结构中,不允许没有顶点
-
图中任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的
-
边的定义
无向边 有向边
8、查找
顺序表查找
有序表查找
- 折半查找
- 插值查找
- 斐波那契查找
线性索引查找
-
稠密索引
稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项;例:记事本
-
分块索引
块内无序,块间有序; 参考图书馆、档案馆存放书籍方式
-
倒排索引
索引项通用结构: 次关键码 记录号表
二叉排序树
平衡二叉树(AVL树)
构建思想: 每当插入一个节点时,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树各节点之间的链接关系,进行相应旋转,使之成为新的平衡子树
多路查找树(B树)
哈希表查找
散列技术最适合的求解问题是查找与给定值相等的记录;但是无法查找最大值、最小值等结果
散列函数的构造方法:
1.直接定址法
2.数字分析法
3.平方取中法
4.折叠法
5.除留余数法
6.随机数法
处理散列冲突的方法:
1.开放定址法
解决冲突的开放定址法称为线性探测法
本来不是同义词却需要争夺同一个地址的情况,称为堆积
为了不让关键字都堆积在一个区域。采用二次探测法/随机探测法 重新计算地址
2.再散列函数法
3.链地址法
4.公共溢出区法
9、排序
排序分类
根据在排序过程中待排序的记录是否全部被放置在内存中,排序分为:内排序和外排序
内排序: 内排序是在排序的整个过程中,待排序的所有记录全部都被放置在内存中。
外排序: 由于排序的记录个数太多,不能同时放置在内存,整个排序过程总需要在内外存之间多次交换数据才能进行
内排序性能影响点:
1.时间性能
2.辅助空间
3.算法的复杂性
内排序分为: 插入排序、交换排序、选择排序和归并排序
排序类型
冒泡排序、简单选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序
- 快速排序!!!
- 随机快排
- 双路快排
- 三路快排
排序方法效率比较
结尾语
- 没有什么是不可能的,不要被条条框框限制住自己的思维
- 如果你有梦想的话,就要去捍卫它。当别人做不到,他们就想要告诉你,你也不能。如果你想要些什么。就努力去争取。