栈类模板设计及应用

题目描述

模拟STL stack类模板设计实现你的stack类模板,该类需具有入栈,出栈,判栈空,取栈顶元素等功能,并能拷贝构造和赋值;利用该类实现本题要求。本题可以使用STL  string类,不可用STL  stack类模板。

输入描述

开始int或string代表需要处理的对象类型。对于每种类型,先构造两个目标类型的空栈,读入整数n,再读入n对整数v、x; 1<=v<=2; 将元素x入第v个栈,n对整数处理完成后, 将两个栈中元素出栈,并输出。

输出描述

每个栈中元素占一行,元素间以空格分隔。

样例输入

int
7
1 100
2 200
1 300
2 400 
1 50
1 60
2 80

string
6
1   some
1   one
2   two
2   tom
1   cat
2   hdu

样例输出

60 50 300 100 
80 400 200 
cat one some 
hdu tom two


练习

代码:(杭电学生勿抄,防查重)
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <vector>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define PI acos(-1.0)
#define N 110
#define me(a,b) memset(a,b,sizeof(a))
#define file freopen("in.txt","r",stdin)
using namespace std;
const int mod=1e8;

template <class Elem>
class mystack
{
private:
       vector<Elem> v;
public:
      mystack(){v.clear();}
      mystack<Elem>(mystack<Elem>& x):v(x.v){}

      void operator=(mystack x)
      {
            v.resize(x.v.size());
            for(int i=0;i<x.v.size();i++)
            {
                  v[i]=x.v[i];
            }
      }
      void push(Elem x)
      {
            v.push_back(x);
      }
      void pop()
      {
            v.pop_back();
      }
      bool empty()
      {
            return v.empty();
      }
      bool size()
      {
            return v.size();
      }
      Elem top()
      {
            return v.back();
      }
      ~mystack(){v.clear();}
};


int main()
{
      //file;
      int n;
      string s;
/*
      //测试 构造函数
      mystack<int>a;
      a.push(3);
      a.push(4);
      a.push(2);
      mystack<int>b(a);
      while(!b.empty())
      {
            cout<<b.top();
            b.pop();
            if(b.size())
                  cout<<' ';
      }
      cout<<endl;
*/
      while(cin>>s)
      {
            cin>>n;
            if(s[0]=='i')
            {
                  mystack<int> a[2];
                  typedef int ttt;

           //输出代码和下面的一模一样,由于typedef作用域问题,我选择复制代码。。 ttt tmp;int t; while(n--) { cin>>t>>tmp; a[t-1].push(tmp); } for(int i=0;i<2;i++) { while(!a[i].empty()) { cout<<a[i].top(); a[i].pop(); if(a[i].size()) cout<<' '; } cout<<endl; } } else { mystack<string> a[2]; typedef string ttt; ttt tmp;int t; while(n--) { cin>>t>>tmp; a[t-1].push(tmp); } for(int i=0;i<2;i++) { while(!a[i].empty()) { cout<<a[i].top(); a[i].pop(); if(a[i].size()) cout<<' '; } cout<<endl; } } } }

 



上一篇:[算法训练营] stack sort


下一篇:Cocos2d入门--1--初涉相关属性或代码