虽然了解了一些数据结构的点,但是我感觉没什么卵用,暂时用不到,相信以后会有很大作用。
1.首先,提纲挈领,数据是计算机中的操作对象包括常用的int、string或者声音、图片、视屏。
数据元素组成数据对象,比方说 : 人类这个数据对象中,人是数据元素;数据项组成数据元素,比方说人的眼、
鼻、耳、嘴、手就是数据项
2.数据元素之间的关系叫逻辑结构,而这种逻辑结构存储在计算机中存储形式叫做物理结构
集合结构:数据元素之间没有关系,只是存储在同一集合。
线性结构:数据元素之间一个关联指向一个
树形结构:数据元素之间一对多关系
图形结构:数据元素之间多对多的关系
顺序存储结构:数据元素依次存放在地址连续的计算机存储器中,需要提前开辟固定空间。
存储或者读取数据时,时间复杂度都是O(1);插入或删除时,时间复杂度O(n)。
链式存储结构:数据元素随意存放在地址连续的计算机存储器中,但是存储中的每个单元都有一个指针指向
下一个元素,相当于线性结构。数据可以动态变化。存储或者读取数据时,时间复杂度都是O(n);插入或删除时,
时间复杂度O(1)。
3.算法的时间复杂度耗费时间从小到大:
O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
4.栈(LIFO)后进先出,只能在栈顶(允许插入或者删除的一端)操作,属于线性结构的一种。
队列(FIFO)先进先出,一端进行插入,另一端进行删除,属于线性结构的一种。
不管是链栈或队列还是顺序栈或队列,时间复杂度都是O(1)。根据物理机构的特性和使用中元素变化考虑,若元素变化多用链,若元素变化少在可控范围内用顺序。
5. 串 (string) 是多个字符组成的有限序列,又称字符串。本质上属于线性结构的扩展。常用KMP算法匹配对比字符串。
6.树(一对多):常见的有二叉树
遍历方式:前序遍历、中序遍历、后序遍历。
哈夫曼编码:通过对二叉树的带权和节点进行构造上的改变。对数据进行压缩原理。
7.图(多对多):存储结构多样化,如邻接矩阵、十字链表、邻接多重表
遍历方式:深度优先遍历、广度优先遍历
最小生成树:普利姆算法(走一步算一步)、克里斯卡尔算法(全局从最短权值边入手)。
最短路路径:迪杰斯特拉算法、弗洛伊德算法(这两个没搞懂)
拓扑排序:因为一些资源或者时间限制条件,必须完成一个节点才能继续下一个节点。
8.查找:
顺序表查找算法:点击进入;
有序表查找:折半查找、插值查找斐波那契查找,详情请点击进入;
线性查找索引:稠密索引、分块索引、倒排索引;
二叉排序树:时间复杂度O(log n)
散列表查找(哈希表):存储位置 = 函数(关键字)。查找时间复杂度O(1);
散列表处理冲突有,开放地址(地址自由推移)、再散列函数法(创建多个散列函数)、链地址法
(一个位置链式存储多个)、公共溢出区法(溢出的单独放一个表)。
9.排序:内排序(内存中处理数据)和外排序(内存与磁盘中交互处理数据)。
内排序:插入排序、交换排序、选择排序和归并排序。详情请点击进入。
从空间上来看,如果内存使用限制比较严格的话,使用堆排序。
从稳定性上来开,归并排序最好。
如果我们比较的n排序数越小,反而适用冒泡、简单选择、直接插入最好。
经过优化的快速排序是性能最好的排序算法。
但是根据实际情况我们应该考虑不用的算法以达到我们系统软件的运行更迅速和稳定。