1. 程式人生 > >棧類模板設計及應用

棧類模板設計及應用

作用域 empty 作用 def private tmp () file public

題目描述

模擬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; } } } }



棧類模板設計及應用