#include<iostream>
#include<string>
#include<vector>
using namespace std;
template<typename T>
class Stack{
private:
vector<T> elems;//这里如果用二维数组会怎么样呢
public:
void push(T const &item);
void pop();
T top();
bool Empty();
Stack(){};
~Stack(){};
Stack(Stack &other);//拷贝构造
Stack & operator= (const Stack &other)
{
elems=other.elems;
}
};
template <typename T>
void Stack<T>::push(T const &item )
{
elems.push_back(item);
}
template <typename T>
void Stack<T>::pop()
{
if(elems.empty()==0)//注意,返回true时为空
{
elems.pop_back();
}
}
template <typename T>
T Stack<T>::top()
{
if(elems.empty()==0)
{
return elems.back();
}
}
template <typename T>
bool Stack<T>::Empty( )
{
return elems.empty();
}
template <typename T>
Stack<T>::Stack (Stack &other)//拷贝构造
{
elems(other.elems);
}
int main()
{
string Typename;
int num;
while(cin>>Typename>>num){
if(Typename=="int")
{
Stack <int> X1;
Stack<int> X2;
for(int i=1;i<=num;i++)
{
int x; int y;
cin>>x>>y;
if(x==1) X1.push(y);
if(x==2) X2.push(y);
}
while(X1.Empty()==0)
{
cout<<X1.top()<<" ";
X1.pop();
}
cout<<endl;
while(X2.Empty()==0)
{
cout<<X2.top()<<" ";
X2.pop();
}
cout<<endl;
}
else{
Stack <string> Y1;
Stack<string> Y2;
for(int i=1;i<=num;i++)
{
int x; string y;
cin>>x>>y;
if(x==1) Y1.push(y);
if(x==2) Y2.push(y);
}
while(Y1.Empty()==0)
{
cout<<Y1.top()<<" ";
Y1.pop();
}
cout<<endl;
while(Y2.Empty()==0)
{
cout<<Y2.top()<<" ";
Y2.pop();
}
cout<<endl;
}
}
return 0;
}
栈模板(C++实现)
最新推荐文章于 2022-02-20 13:11:21 发布