算法:

118 阅读3分钟

栈:(像是弹夹的装弹和取弹)

实现:

压入:加到最后,取的话也从最后去取

增加的思路:

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.增加节点:

  1.    当前节点后面,把原来下个节点作为下下个节点
  2.    当前节点的next指向新节点,新节点的前向指向当前节点
  3. 让原来的下一个节点作为新节点的下一个节点,让新节点成为原来下一个节点的pre
  4.  获取上一个 next
  5. 获取下哟个  per


递归:

斐波那契:

定义前两个特殊的值  1和 2

从第三项开始,有公式 新的值等于前两项递归函数之和的


汉诺塔问题:


算法时间复杂度:


评价好坏:

1. 事后统计(计时)  不是很靠谱

2. 事前

   时间复杂:T(n) 语句执行的次数。常数项可以忽略。;低次项可以省略;系数可以忽略,总结看对函数值影响大的部分。

计算时间复杂度

1.函数表示句频

   空间复杂:


八种常见的排序算法:

交换排序: 冒泡排序:

快速排序:

实现:

1.选取标准数(start)

2.记录需要片列的下标

3.循环找


排序:

希爾排序   沒聼懂


歸并排序:

1.選擇第一個元素作爲最小的

2.向後去比較,如果有發現比這個元素更小的,則改變min的下標,并且把這個元素和目前的最小值交換


二叉樹:子節點數目不超過2的節點

要求:子節點分爲左節點和右節點,不可顛倒

節點總數: 2N-1

完全二叉樹: 倒數第二層從右邊連續,最後一層是左邊連續。只有倒數第二或者第一層有葉子節點

存儲結構:

鏈式:


遍歷:

1.前序:先根節點

2. 中旭:左 雙親  右 

1.後序 : 左右根


前序查找

删除二叉树某一个节点