//虽然和简单,但还是要记录一下,以防忘记
单链表
//用两个数组e[N]和ne[N]存储当前值和下一个值的坐标,另外设立头指针head和记录个数的idex
//总得来说就三步1.把值付给最后一位2.然后改变ne[N]数组相关元素指向3.idex++如果需要改变头指针
//数组在设置时 head=-1,idex=0;
//在插入删除第k个数时,由于是从0开始要实际删除第k-1个
//从头插入元素
void headin(int x){
e[idex]=x;
ne[idex]=head;
head=idex++;
}
//插入到第k个元素位置
void in(int k,int x){
e[idex]=x;
ne[idex]=ne[k];
ne[k]=idex++;
}
//删除第k个元素
void delet(int k){
ne[k]=ne[ne[k]];
}
双链表
//与单链表无异,注意改变前后关系的顺序就行
//设置e[N],l[N],r[N]三个数组进行存储
//初始化
void init(){
l[1]=0;
r[0]=1;
idex=2;
}
//插入
//在插入左边时相当于插入其左边数的后面add(l[k+1],x),插入目标数右边时add(k+1,x),都为k+1是因为尾指针前边
void add(int k,int x){
e[idex]=x;
l[idex]=k;
r[idex]=r[k];
l[r[k]]=idex;
r[k]=idex;
idex++;
}
//删除
void delet(int k){
r[l[k]]=r[k];
l[r[k]]=l[k];
}
栈
//设立尾指针tt
//插入删除都在尾部进行
stl栈
//在头文件#include<stack>中设stack<int> num;
//插入 num.push(x); 栈顶元素 k=num.top(); 删除 num.pop(); 大小 num.size();
补充知识
//在头文件#include<unordered_map>中,用数字表示字符来表示自定义优先级大小
//比较栈顶字符元素与输入字符c的优先级大小关系
unordered_map<char,int> pr{{'+',1},{'-',1},{'*',2},{'/',2}};
pr[op.top()]>=pr[c]
队列
//初始化设置头指针hh为0,尾指针tt为-1,当tt>=hh有值
//输入队尾++,加入值,出队输出队头,队头--
单调队列和单调栈
//利用队和栈的特性,利用单调性对问题进行优化为单增或单减,并把握取值区间从而求解