有错误恳请指正
前言
STL的容器固然好,但有些简单的栈,队列,链表因为STL里面好像是要动态申请内存,于是便有点慢,并且自己手写还可以加入自己想要的功能,不用受制于STL。如:想将栈顶的两个值变为一个乘积,用STL只能将两个依次出栈,用两个变量记录值,然后相乘在入栈,很麻烦,而手写栈只需要2行搞定。
模板:
双向链表
struct node{
int val; //值
int nxt; //当前节点的后继
int pre; //当前节点的前驱
}list[N];
队列
struct Que{
int que[N],h=1,t=0;//这里h=1,t=0主要是为了方便循环链表
bool empty(){
return h<=t;
}
int size(){
return t-h+1;
}
void clear(){
h=1,t=0;
}
void push(int x){
sta[++t]=x;
}
int top(){
return sta[t];
}
int bot(){
return sta[h];
}
void pop(){
++h;
}
};
栈
struct Sta{
int sta[N],top=0;
bool empty(){
return top > 0 ? 1 : 0;//三目运算符,就是逻辑运算 ? 成立 : 不成立
}
int size(){
return top;
}
void clear(){
top=0;
}
void push(int x){
sta[++top]=x;
}
int top(){
return sta[top];
}
void pop(){
--top;
}
};
心得
封装函数大法好,想要什么理解了自己加。