单链表
初始化!!!
head = -1; //头节点
idx = 0; //当前能用的下标
向头节点插入
void add_head(int num){
v[idx] = num;
ne[idx] = head;
head = idx ++;
}
向第k个数后插入
void add(int k,int num){
v[idx] = num;
ne[idx] = ne[k];
ne[k] = idx ++;
}
删除第k个数后面的数(注意头节点特判)
void remove(int k){
if(k < 0) head = ne[head]; //这种情况说明是删除头节点后面的数,传进来的是k-1
else ne[k] = ne[ne[k]];
}
双链表
初始化
void init(){
l[1] = 0;
r[0] = 1;
idx = 2;
}
向表中插入数据
void add(int k,int num){
v[idx] = num;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;
r[k] = idx;
idx ++;
}
删除第k个数后面的数
void remove(int k){
r[l[k]] = r[k];
l[r[k]] = l[k];
}
栈
入栈、出栈和空栈
idx = 0; //初始化
void push(int num){
stk[idx ++] = num;
}
void pop(){
idx --;
}
bool empty(){
return (idx == 0);
}
队列
入队、出队和空队
int hh = 0,tt = -1; //hh --> 头, tt -> 屁股 队列的初始化
bool empty(){
return (hh > tt);
}
void push(int num){
q[++ tt] = num;
}
void pop(){
hh ++;
}