栈:(像是弹夹的装弹和取弹)
实现:
压入:加到最后,取的话也从最后去取
增加的思路:
1.创建一个比之前长度长1的数组
2.将之前数组的元素复制到新的里面
3.吧添加的元素放在数组的最后面
4.用新数组替换旧数组
取出的因素:
1.删除末尾的
2.创建一个长度-1的数组
3.把原数组复制到新数组
4.替换数组
5.返回删除了的元素
队列:
排队 : 先进先出 FIFO
单链表:
数据+下一个节点的位置(火车)
Node 字段 int, Node
实现:
1.增加节点
- 创建当前节点局部变量,将this设置为当前节点
- 循环找到链表的尾部(while,判断next是否为空,不为空则把next的元素赋值给current,一直循环,循环到next为空,break跳出循环)
- 将要追加的元素放在current.next里面
s删除节点:
1.取出下下个节点,
2.吧下下个节点变成当前节点
插入节点在当前节点的next:
1. 取出next作为下下个节点
2. 新节点作为当前节点的next
3.吧新节点的next设置为刚设置的下下个节点
循环链表:
最后一个节点指向第一个
1.之前的last最后追加元素不能用了
2.判断为空的 next==null也不能判断了
3.next初始化的时候==this(只需要做这个改动)
双链表:
循环 非循环
实现:
1.字段 ,上一个设置为 this,下一个设置为this,数据本生
2.增加节点:
- 当前节点后面,把原来下个节点作为下下个节点
- 当前节点的next指向新节点,新节点的前向指向当前节点
- 让原来的下一个节点作为新节点的下一个节点,让新节点成为原来下一个节点的pre
- 获取上一个 next
- 获取下哟个 per
递归:
斐波那契:
定义前两个特殊的值 1和 2
从第三项开始,有公式 新的值等于前两项递归函数之和的
汉诺塔问题:
算法时间复杂度:
评价好坏:
1. 事后统计(计时) 不是很靠谱
2. 事前
时间复杂:T(n) 语句执行的次数。常数项可以忽略。;低次项可以省略;系数可以忽略,总结看对函数值影响大的部分。
计算时间复杂度
1.函数表示句频
空间复杂:
八种常见的排序算法:
交换排序: 冒泡排序:
快速排序:
实现:
1.选取标准数(start)
2.记录需要片列的下标
3.循环找
排序:
希爾排序 沒聼懂
歸并排序:
1.選擇第一個元素作爲最小的
2.向後去比較,如果有發現比這個元素更小的,則改變min的下標,并且把這個元素和目前的最小值交換
二叉樹:子節點數目不超過2的節點
要求:子節點分爲左節點和右節點,不可顛倒
節點總數: 2N-1
完全二叉樹: 倒數第二層從右邊連續,最後一層是左邊連續。只有倒數第二或者第一層有葉子節點
存儲結構:
鏈式:
遍歷:
1.前序:先根節點
2. 中旭:左 雙親 右
1.後序 : 左右根
前序查找
删除二叉树某一个节点