雙端棧

來源:互聯網
上載者:User

 

/*雙端隊列可以用於儲存兩個棧,使用deque來實現的*讀入20個隨機整數,把偶數壓入一個棧*把奇數壓入另一個棧*然後分別彈出並輸出兩個棧的元素,直到為空白*///備忘:隨機數要加上種子,要不然不會變的,這個不是mfc版#include<iostream>#include <deque>#include "time.h"using namespace std;enum stackNumber {one ,two};template <typename T>class dualStack{public:dualStack();//建構函式void push(const T& item, stackNumber n);void pop(stackNumber n);T&top(stackNumber n);const T&top(stackNumber n) const;bool empty(stackNumber n) const;int size(stackNumber n) const;private:deque<T>dualStackElements;int count1,count2;};template <typename T>dualStack<T>::dualStack():count1(0),count2(0) {}template< typename T>void dualStack<T>::push(const T&item, stackNumber n){if(n==one){dualStackElements.push_front(item);count1++;}else if(n==two){dualStackElements.push_back(item);count2++;}}template <typename T>void dualStack<T>::pop(stackNumber n){if(n==one){dualStackElements.pop_front();count1--;}else if(n==two){dualStackElements.pop_back();count2--;}}template <typename T>T& dualStack<T>::top(stackNumber n){if(n==one)return dualStackElements.front();else if(n==two)return dualStackElements.back();}template <typename T>const T& dualStack<T>::top(stackNumber n) const{if(n==one)return dualStackElements.front();else if(n==two)return dualStackElements.back();}template<typename T>bool dualStack<T>::empty(stackNumber n) const{//if(n==one)if(n==one){if(count1==0)return true;elsereturn false;}else if(n==two){if(count2==0)return true;elsereturn false;}}template<typename T>int dualStack<T>::size(stackNumber n) const{if(n==one)return count1;else if(n==two)return count2;}int main(){dualStack<int >ds;//int num=0; srand(time(NULL));for(int i = 0; i<20; ++i){int num=rand()%20;//num++;if(num%2==1)ds.push(num,one);else if(num%2==0)ds.push(num,two);}//看看是否雙端棧為空白if(ds.empty(one))cout<<"奇數列為空白!"<<endl;elsecout<<"奇數列不為空白!"<<"且大小為"<<ds.size(one)<<endl;if(ds.empty(two))cout<<"偶數列為空白!"<<endl;elsecout<<"偶數列不為空白!"<<"且大小為"<<ds.size(two)<<endl;cout<<"奇數: ";int size1=ds.size(one);for(int j = 0; j<size1; ++j){cout<<ds.top(one)<<" ";ds.pop(one);}cout<<endl;cout<<"偶數: ";int size2=ds.size(two);for(int k = 0; k<size2; ++k){cout<<ds.top(two)<<" ";ds.pop(two);}cout<<endl;//看看是否雙端棧為空白if(ds.empty(one))cout<<"奇數列為空白!"<<endl;elsecout<<"奇數列不為空白!"<<"且大小為"<<ds.size(one)<<endl;if(ds.empty(two))cout<<"偶數列為空白!"<<endl;elsecout<<"偶數列不為空白!"<<"且大小為"<<ds.size(two)<<endl;return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.