结构体 struct 

7.15(2)_数组

 

 

 构造函数

7.15(2)_父节点_02

 

 

 //

数据结构

1.数组

询问(O(1)),修改(O(1)),插入(O(n)),删除(O(n))。

2.链表(双向链表)

可解决数组插入和删除过慢的问题

  思路:

链表(元素)的删除(O(1))

7.15(2)_子节点_03

 

链表(元素)的插入(O(1))

7.15(2)_数组_04

 

 

 链表的查询与修改(O(n))

 

  实现:

 

3.队列(queue)

7.15(2)_父节点_05

  实现

手写队列

7.15(2)_链表_06

 

 

 

 

 

 

STL队列 

 

7.15(2)_最小堆_07

 

 

 push()向队列加入,pop()删除队首

 

3.栈(stack)

7.15(2)_子节点_08

 

 

 

  实现

 

手写队列

 

STL队列

7.15(2)_子节点_09

top()访问最上层元素

 

 

 

4.双段队列(deque)

STL

7.15(2)_数组_10

 

 

5.堆(heap)

堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。

在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。

 

加入一个数,删除最大(最小)的数,访问最大(最小)的数

 

//

二叉树(一个节点只有两个子节点,先有左子节点,再有右子节点)

7.15(2)_数组_11

 

//

 

 

堆(特殊的二叉树——每个节点值比其二子节点大(小))

7.15(2)_链表_12

实现

7.15(2)_父节点_13

 

 

插入(O(log2 p))

 

 7.15(2)_最小堆_14

 

 

 

 删除

7.15(2)_父节点_15

 

 

STL堆(优先队列)

7.15(2)_链表_16

 

 

 把push的值加负号,可转化为小根堆。

 

//

重载运算符

7.15(2)_父节点_17

7.15(2)_子节点_18   

const保证x,y的值不会改变,&保证x,y不会被复制从而节省时间

 

//

 

6,map——功能强大的数组

 

7.15(2)_父节点_19

 只要下标在定义范围内,均合法

 

STL算法

#include<algorithm>

1.两个数

7.15(2)_链表_20

 

 

 min(),max()内的变量类型必须一样

2.n个数

  翻转

 

e.g. 1 2 3 4 5     5 4 3 2 1 

  排序 

从小到大

自定义比较函数

 

 7.15(2)_父节点_21

从大到小

7.15(2)_子节点_22

 

绝对值从小到大

 

  去重

7.15(2)_子节点_23

7.15(2)_父节点_24