#include <iostream>
using namespace std;
const int StackSize=100;
template<class T>
struct Node {
T data;
Node* next;
};
template<class T>
class BothStack
{
public:
BothStack(){top1=-1;top2=StackSize;}
~BothStack(){}
void Push(int i,T x);
T Pop(int i);
T GetTop(int i);
bool Empty(int i);
private:
T data[StackSize];
int top1,top2;
};
template<class T>
void BothStack<T>::Push(int i,T x)
{
if(top1==top2-1){throw "上溢";}
if(i==1)
{
data[++top1]=x;
}
if(i==2)
{
data[--top2]=x;
}
}
template<class T>
T BothStack<T>::Pop(int i)
{
T x;
if(i==1)
{
if(top1==-1){throw "下溢";}
x=data[top1--];
return x;
}
if(i==2)
{
if(top2==StackSize){throw "下溢";}
x=data[top2++];
return x;
}
}
template<class T>
T BothStack<T>::GetTop(int i)
{
if(i==1)
{
if(top1!=-1) return data[top1];
}
if(i==2)
{
if(top2!=StackSize) return data[top2];
}
}
template<class T>
bool BothStack<T>::Empty(int i)
{
if(i==1)
{
if(top1==-1)return 1;else return 0;
}
if(i==2)
{
if(top2==StackSize)return 1;else return 0;
}
}
int main()
{
int x,i;
BothStack<int> s;
s.Push(1,6);
s.Push(1,7);
s.Push(1,8);
s.Push(2,9);
s.Push(2,10);
s.Push(2,11);
cout<<"当前栈顶Top1元素为:"<<s.GetTop(1)<<endl;
cout<<"当前栈顶Top2元素为:"<<s.GetTop(2)<<endl;
try
{
cout<<"请输入要入栈的类型及元素:"<<endl;
cin>>i;
cin>>x;
s.Push(i,x);
cout<<"当前栈顶Top"<<i<<"元素为:"<<s.GetTop(i)<<endl;
}catch(const char *str){cout<<str<<endl;}
try
{
cout<<"请输入要出栈的类型:"<<endl;
cin>>i;
x=s.Pop(i);
cout<<"执行一次出栈操作,删除元素: "<<x<<endl;
cout<<"当前栈顶Top"<<i<<"元素为:"<<s.GetTop(i)<<endl;
}catch(const char *str){cout<<str<<endl;}
cout<<"请输入要判断空栈的类型:"<<endl;
cin>>i;
if(s.Empty(i))
{
cout<<"栈为空"<<endl;
}
else
{
cout<<"栈非空"<<endl;
}
return 0;
}
运行结果
![](https://img-blog.csdnimg.cn/direct/5b39526ce0de4732ad9f91a433fcf1f1.png)