时间过的SO快、一眨眼又自考了、都说数据结构挺难的、但是跟人感觉比数据库系统原理好搞吧- -、那卷子看了直接晕啊、还是数据结构好、没啥要记的、画画图、满好搞的、算法嘛……看懂一次下次再看又忘了、果然没好好总结啊!
思维导图
逻辑上元素与元素之间的关系、有线性表、栈、队列、数组、树、二叉树、图等。(线性非线性)
实现逻辑结构、数据在计算机存储器的储存方式、有顺序存储结构和链式存储结构两种。
针对算法、说的是时间效率和空间效率、就是你这个算法、花多长时间、多少空间、这是一个相对的概念。
时间
假设算法中循环次数N为无限大、有一个循环时间复杂度就是O(n)、两个循环就是O(n2)、没有循环复杂度为O(1).其他可无视、因为都是绝对时间、相比N太小。
例子:
<span style="font-size:18px;">for(i=1;i<=n;++i) { for(j=1;j<=n;++j) { c[i][j]=0;//该步骤属于基本操作执行次数:n的平方次 for(k=1;k<=n;++k) c[i][j]+=a[i][k]*b[k][j];//该步骤属于基本操作执行次数:n的三次方次 } }</span>
空间
这个就是看数组的维数、在这里数组维数都是可变的N维、当N无限大、一维数组空间复杂度O(n)、二维数组O(n2)、无数组O(1).其他变量常量无视、相对与无限大的数组、固定空间不计。
一个挨着一个、永不分离。
特点:物理空间连续
图
虽然天各一方、但紧紧联系在一起。
特点:物理空间不一定连续、元祖之间靠指针连着。
图
特点:一条路径
栈
特点:先进后出
关键字:TOP、进栈-溢出-栈顶、出栈-下溢-栈低、
栈是特别简单的逻辑结构、就像装羽毛球的桶、一个个往里面放羽毛球、最先放进去的要最后才能拿出来、这就是栈的特性、TOP是指栈顶元素。
进栈就好似放入一个羽毛球、因为加了一个、TOP+1、放满了再放就放不进去了、栈储存量有限、如果满了还放就会溢出。
出栈就把羽毛球拿出来、每次TOP-1、当TOP=0也就是没有元素的时候、再取元素就会产生下溢。
图
队列
特点:先进先出
关键字:入队列、出队列、首指针、尾指针、假溢出
队列就像下蛋笔、每次从后面放入(入队列)、从前面拱出(出队列)、尾指针(rear)、头指针(front)、队列进出如图
顺序结构
当rear和front都指在最顶就会假溢出
解决办法:循环队列、尾指针到头就会继续从头循环
特点:甜甜圈、有一个空间留着(判定满了没)
评语:贪吃蛇、转圈来、绝对咬不到尾巴呦!
关键运算:取余
《数组》
二维数组--矩阵压缩
目的:节省空间
方法:多个想通值分配一个存储空间、0值不分配空间。
特点:跟现实中树一样、能分叉、分多个叉
关键字:空树、节点、节点的读、叶子、树的度、树的高度、有序树、无序树、
遍历:先序、后序、层次
特点:
继承了树的传统、但是特别之处在于他每一个叉只能分两个叉、弹弓之树!为弹弓而生。。。
如图
常见问题:
1、给层数求最多节点数(满二叉树)
i=层数 最多节点数2i-1个节点
2、给深度、求节点数(满二叉树)
k=深度 2k-1
3、叶子节点总比非叶子节点多1个呦!
遍历
先序、中序、后序。
问题:有其中两个求第三个
遍历图
注意:先序、中序、后序遍历每次都是以根节点按顺序开始、类似递归。
层次遍历:从第一层依次遍历、没啥说的。
树存储结构(链)
孩子链表
孩子兄弟链表
双亲表示法
森林、树、二叉树转换
树—>二叉树
兄弟齐心、变成二叉树= =
注:森林就是好多树
森林—>二叉树
二叉树—>森林
每次合并最小的两个值成为一棵二叉树、合并的值放入数列继续合并、直到最后合并成一棵二叉树。为什么要这样?有什么意义
其实就是为了检索、比较的值其实是他们的出现频率、你会发现、出现频率越小的、越在下面、找到他要多几条‘线’,值大的在上面、也就是使用频率高的、在上面更容易找到、用哈弗曼编码的结果就是、常用的很快能找到、不常用的也能找到、就是慢一点、比如家里的筷子天天用、就放在外面、蜡烛只有在停电的时候用、就放在柜子里面、性质差不多。
哈弗曼编码
哈弗曼树的基础上、根链接左子树和右子树边写上0和1、这样找到任何一个节点都能写成编码、
特点:
多个圆圈可以随意相连、有的带箭头有的不带、带箭头的有的会弯曲、有箭头的只能向箭头的方向走。
关键字:
顶点(圆圈)、边(连的线)、权(线上的数)、有向图无向图(有箭头、没箭头)、度(连圆圈有几条线)、路径长度(顶点V1到顶点V2经过边的数目)
图的表示:
G=(V,E)注:V是顶点的集合、E是线段的集合
V={V0,V1,V2,V3}
E={(V0,V1),(V1,V2),(V1,V2),(V2,V3)}注:()括起来两个顶点的是-无向图
E={<V0,V1>,<V1,V2>,<V2,V3>,<V3,V4>,<V3,V1>,<V4,V0>,}注:<>括起来两个顶点的是-有向图
出度、入度、顶点的度、
出度:出去的线
ID(V1)=1
就是顶点V1的出度为1
入度:进来的线
OD(V1)=2
就是顶点V1的入度为2
度:顶点出来进去所有线之和=入度+出度
D(V1)=ID(V1)+OD(V1)=3
原文地址:http://blog.csdn.net/u010191034/article/details/39755433