程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序

編輯:C++入門知識

 題目描述:

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列


 

可以AC的代碼:

 
bool isStackSequence(int *input,int *output,int len)  
{  
    /*if(input==NULL || output==NULL) 
    { 
        throw new exception("the input is error"); 
    }*/  
    stack<int> st;  
    while(len--)  
    {  
        st.push(*input++);  
        while(!st.empty() && st.top()==*output)  
        {  
            st.pop();  
            output++;  
        }  
    }  
    if(st.empty())  
    {  
        return true;  
    }else  
    {  
        return false;  
    }  
}  
int main(int argc, const char * argv[])  
{  
    int n,i;  
    //fstream cin("input.txt");   
    while(cin>>n)  
    {  
        int *input=new int[n];  
        int *output=new int[n];  
        for(i=0;i<n;i++)  
        {  
            cin>>input[i];  
        }  
        for(i=0;i<n;i++)  
        {  
            cin>>output[i];  
        }  
        if(isStackSequence(input,output,n))  
        {  
            cout<<"Yes"<<endl;  
        }else  
        {  
            cout<<"No"<<endl;  
        }  
        delete []input;  
        delete []output;  
    }  
    //getchar();   
    return 0;  
}  

 

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