前几天一直在不停的面试,发现,大公司特别喜欢考到数据结构与算法,小公司喜欢问你会不会这啊那啊的工具,但是,不能被带跑偏了,造轮子的工具要会用,但是,工具的是什么做成的,这些底层原理还是要掌握。自己在这块儿的知识还有一些薄弱,所以打算写BLOG记录自己的学习过程,一是为了记录,二是为了监督自己
stack 栈,特殊的线性结构,先进八的压入到栈底,先进后出的原则
heap 堆,最优排列或称为完全二叉树,有最大堆和最小堆两种类型
list 链表 在内存中非连续非顺序由指针指向下一个元素的元素头的数据块
double-list 双向链表 在内存中的结构与链表类似,但是,每一个数据块都有两个指针,指向相反的方向
b-tree 平衡树 多路搜索树,(二叉树只是其中的一种)
定义:(1),树的每个节点必然有m个子结点
(2),若根节点不是叶子节点,必然有左右两颗子树
(3),除根节点外,其余节点必有m/2个节点
树的查找,先序 根左右,中序 左根右,后序 左右根
树的插入:从非空树开始,逐个插入关键码而生,同时进行排序,若插入的空间满 了,就分裂,将一半的关键字分裂到相邻的右结点中,中间关键码向上移到父结点
树的删除:1 富余的情况下,直接删除即可富余就是m/2>1的情况下
2,不富余的时候下,就看相邻的左结点也就是兄弟节点是否富余,1,如果兄弟是富余的,就向父节点借一个,由兄弟结点补上,2如果兄弟节点也不富余,就看父结点是否富余,如果父节点是富余的,直接借掉,如果父结点也不富余,就向上递归查找,到根结点也无法满足就将树的阶数减1,重新排列。
图,是研究几何图形与图形数据元素之间的关系 ,自己也不是太懂
时间复杂度是什么?怎么计算得来的?
程序的执行所需要的时间,为了方便比较和学习,就引入了时间复杂度的概念记叫O(n),叫作大O表示法。
时间复杂度的大小比较:
Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<Ο(n2)<Ο(n3)<…<Ο(2^n)和Ο(n!)