1. 为什么要用它
是因为STL栈比手写栈慢,所以有人会用手写栈。
STL栈可以看看我的这篇文章:传送门。
2. 内容
作者这里只实现这几个基本的函数。
push(x)//压入元素x。
pop()//按先进后出弹出最顶端元素。
top()//查询最顶端元素。
size()//查询元素个数。
empty()//查询是否为空(若返回true为空,否则为不空)。
手写栈我们可以用数组来写,还可以用vector来写。
3. 代码
lv.1 散装:
只能调用函数对一个栈进行操作。
定义:写的时候就以定义。
int s[10005],n;//s栈,n栈的长度。
void push(int x){
s[++n]=x;
}
void pop(){
if(n!=0)n--;
}
int top(){
if(n!=0)return s[n];
}
int size(){
return n;
}
bool empty(){
if(n==0)return 1;
else return 0;
}
lv.2 struct封装:
可以不停定义新栈。
定义:
Stack 栈名;
struct Stack{
int s[10005],n;//s栈,n栈的长度。
init(){
n=0;
}//构造函数:初始化。
void push(int x){
s[++n]=x;
}
void pop(){
if(n!=0)n--;
}
int top(){
if(n!=0)return s[n];
}
int size(){
return n;
}
bool empty(){
if(n==0)return 1;
else return 0;
}
};
lv.3 class封装:
可以设置站的类型;将栈的元素设为像STL栈一样不可访问。
定义:
Stack<类别> 栈名;
template class Stack{
public:
init(){
n=0;
}//构造函数:初始化。
void push(int x){
s[++n]=x;
}
void pop(){
if(n!=0)n--;
}
int top(){
if(n!=0)return s[n];
}
int size(){
return n;
}
bool empty(){
if(n==0)return 1;
else return 0;
}
protected:
t s[10005];long long n;//s栈,n栈的长度。
};
今天的手写栈讲完了,快春节了,留个赞再走呗!收藏也行!祝大家新年快乐!bye-bye!