栈是限定仅在表尾进行插入和删除操作的线性表。栈的特性是后进先出(last in first out)。对于栈的两种操作压栈Push和出栈Pop,有一个非常有趣的段子,如何辨别一个人是不是程序员,那就问他Push的反义词是啥。回答Pull的肯定不是,回答Pop的才是真正的程序员!
一.顺序栈
#include<iostream>
using namespace std;
const int StackSize=100;
template<class T>
class SeqStack
{
T data[StackSize];
int top; //栈顶指针,指示栈顶元素在数组中的下标
public:
SeqStack(); //构造函数
~SeqStack(){} //析构函数
void Push(T x); //将x入栈
T Pop(); //弹出栈顶元素
T GetTop(); //取栈顶元素
bool Empty(); //判断栈是否为空
int Top() //返回栈顶值
{
return top;
}
};
template<class T>
SeqStack<T>::SeqStack()
{
top=-1;
}
template<class T>
void SeqStack<T>::Push(T x) //压栈操作
{
data[++top]=x; //这里就是top初值不能赋为0的原因
}
template<class T>
T SeqStack<T>::Pop()
{
return data[top--];
//上面一句可展开
//T x=data[top--];
//return x;
}
template<class T>
T SeqStack<T>::GetTop()
{
return data[top];
}
template<class T>
bool SeqStack<T>::Empty()
{
if(top==-1)return 1;
else return 0;
}
int main()
{
SeqStack<int> a;
cout<<"示例:对10和15进行入栈"<<endl;
a.Push(10);
a.Push(15);
cout<<"栈顶元素为:"<<endl;
cout<<a.GetTop()<<endl;
cout<<"执行出栈操作:"<<endl;
cout<<a.Pop()<<endl;
cout<<"栈顶元素为:"<<endl;
cout<<a.GetTop()<<endl;
return 0;
}