程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 棧的push、pop序列

棧的push、pop序列

編輯:C++入門知識

題目:輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。
比如輸入的push序列是1、2、3、4、5,那麼4、5、3、2、1就有可能是一個pop系列。因為可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,這樣得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

 

 

[cpp]
#include <iostream>  
using namespace std; 
const int MAXSIZE=10; 
template<class T> 
class stack 

public: 
    stack(); 
    ~stack(); 
    bool push(T value); 
    bool pop(); 
    bool empty(); 
    T top(); 
private: 
    T s[MAXSIZE];//棧對應的元素  
    int head;//指向棧頂元素  
}; 
 
template<class T> 
bool stack<T>::empty() 

    return head==-1?1:0; 

 
template<class T> 
stack<T>::stack() 

    head=-1; 

 
template<class T> 
stack<T>::~stack() 


 
template<class T> 
bool stack<T>::push(T value) 

    if((MAXSIZE-1)==head){ 
        cout<<"棧已滿"<<endl; 
        return false; 
    } 
    s[++head]=value; 
    return true; 

 
template<class T> 
bool stack<T>::pop() 

    if(-1==head){ 
        cout<<"棧已空"<<endl; 
        return false; 
    } 
    --head; 
    return true; 

 
template<class T> 
T stack<T>::top() 

   if(-1==head) 
       throw 1; 
   else 
       return s[head]; 

 
bool Is_Pop(int *a,int *b,int len_a,int len_b) 

    if(len_a!=len_b) 
        return false; 
    stack<int> s; 
    int i=1,j=1; 
    while(j!=len_a){ 
        //如果輸入的b數組數字有問題  
        if(b[j]<1 || b[j]>=len_a) 
            return false; 
        //如果數組a全部入棧,那麼依次出棧和b[j]比較  
        if(i==len_a){ 
            while(!s.empty()){ 
                if(s.top()!=b[j++]) 
                    return false; 
                s.pop(); 
            } 
            return true; 
        } 
        if(a[i]<b[j]){ 
            s.push(a[i++]); 
        } 
        else { 
            s.push(a[i]); 
            ++i; 
            ++j; 
            s.pop(); 
        } 
    }     
    return true; 

 
void main() 

    stack<int> s; 
    int Push[]={0,1,2,3,4,5};//從Push[1]開始  
    int Pop[]={0,4,3,5,1,2};//從Pop[1]開始  
    cout<<Is_Pop(Push,Pop,sizeof(Push)/sizeof(int),sizeof(Pop)/sizeof(int)); 
    system("pause"); 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved