算法日志
(2017.11.25 第一天)
数据结构:
线性表:数据以一对一的形式存储,每个元素都有唯一的前驱、唯一的后继。
栈:数据的插入、查询、删除只能从栈顶操作。(后进先出)
队列:数据的插入、查询、删除只能在队首/队尾操作。(先进先出)
栈的需求与基本操作:
Top:表示栈顶元素的位置
Stack[i]:表示栈中第I个元素的值
0、初始化
Top=0;
1、插入元素X
Top=top+1;
Stack[top]:=x;
2、判断栈非空
Top>0 ?
3、弹出栈顶元素
If top>0 then
Dec(top);
4、取出栈顶元素
If top>0 then
Exit(stack[top]);
队列的需求与基本操作:
Head、tail:表示队首/队尾的位置
Que[i]:表示队列中第I个元素的位置
0、初始化
Head=1
Tail=0
1、判队列非空
Head<=tail ?
2、在队首/队尾插入元素X
队尾:tail=tail+1
Que[tail]=x;
队首:head-head-1;
Que[head]=x;
3、队首/队尾弹出
队首:if head<=tail head=head+1;
队尾:if head<=tail tail=tail-1;
4、取出队首/队尾元素
队首:if head<=tail exit(que[head]);
队尾:if head<=tail exit(que[tail]);
单调队列*(递增)
对于任意I J,head<=i<=j<=tail
满足:a[que[i]]<=a[que[j]]
单调队列(严格递增)
满足:a[que[i]]<a[que[j]];
(单调栈同上)
单调队列的应用:定区间求最值。
↓
后面的元素比前面的小于等于,前面删除,否则保留。