給定入棧序列 stackIn 和出棧序列 stackOut,判斷 stackOut 是否為合法的出棧順序。假設元素唯一。
s 模擬入棧過程。#include#include #include using namespace std; bool CheckSequence(int* stackIn, int* stackOut, int lenIn, int lenOut) { assert(stackIn && stackOut); if (lenIn != lenOut) return false; // 長度不同必不合法 stack s; int j = 0; // 出棧序列指針 for (int i = 0; i < lenIn; ++i) { s.push(stackIn[i]); while (!s.empty() && s.top() == stackOut[j]) { s.pop(); ++j; } } return s.empty(); // 棧空說明所有元素都按序出棧 } int main() { int stackIn[] = {1, 2, 3, 4, 5}; int stackOut[] = {5, 4, 2, 3, 1}; // 合法 int len = sizeof(stackIn) / sizeof(stackIn[0]); bool ok = CheckSequence(stackIn, stackOut, len, len); cout << (ok ? "出棧順序合法" : "出棧順序不合法") << endl; return 0; }