CheckSequence.cpp #include<iostream> #include <assert.h> using namespace std; #include <stack> bool Checksequence(int *stackIn, int *stackOut,int lenIn,int lenOut){ assert(stackIn && stackOut); if (lenIn != lenOut) //兩個序列長度不相等,不合法 return false; stack<int> s; for (int i = 0; i < lenIn; i++){ int j = 0; s.push(stackIn[i]); while (s.size() > 0 && s.top() == stackOut[j]){ //入棧序列棧頂元素與當前出棧序列元素不相等,不合法 s.pop(); j++; } } return (s.size()>0) ?false:true; //當所有出棧序列元素都匹配完之後,棧不為空,不合法 } int main(){ int stackIn[] = { 1, 2, 3, 4, 5 }; //入棧序列 int stackOut[] = { 5, 4, 2, 3, 1 }; //出棧序列 int len_in = sizeof(stackIn) / sizeof(stackIn[0]); //入棧序列長度 int len_out = sizeof(stackOut) / sizeof(stackOut[0]); //出棧序列長度 bool ret = Checksequence(stackIn, stackOut,len_in,len_out); if (ret) cout << "出棧順序合法" << endl; else cout << "出棧順序不合法" << endl; return 0; }