用C++代码,检验出栈序列的正确性
时间: 2024-12-01 10:30:12 浏览: 19
在C++中,你可以使用栈(Stack)数据结构来模拟入栈和出栈操作,然后验证一个出栈序列是否能还原回原始的输入序列。通常,我们会有一个入栈函数push和一个出栈函数pop。为了检查序列的正确性,你需要先将所有的元素依次压入栈,然后再按照出栈序列弹出元素并存储在一个临时数组里。最后,比较这个临时数组和原始输入序列是否相等。
以下是一个简单的示例:
```cpp
#include <iostream>
#include <stack>
#include <vector>
// 假设我们的元素是整数,并且我们有入栈函数 push 和出栈函数 pop
void push(int val, std::stack<int>& stack) {
stack.push(val);
}
int pop(std::stack<int>& stack) {
if (stack.empty()) {
throw "Empty stack!";
}
return stack.top(); // 返回栈顶元素
stack.pop(); // 出栈元素
}
bool isValidSequence(const std::vector<int>& input, const std::vector<int>& output) {
std::stack<int> tempStack;
for (const auto& num : input) {
push(num, tempStack);
}
// 检查出栈顺序
for (const auto& num : output) {
try {
if (num != pop(tempStack)) {
return false; // 如果出栈的数与期望不符,返回false
}
} catch (const char* msg) {
return false; // 如果栈为空,说明出栈顺序错误
}
}
// 如果所有元素都成功出栈,则序列有效
return true;
}
int main() {
std::vector<int> input = {1, 2, 3};
std::vector<int> output = {3, 2, 1}; // 正确的出栈序列
if (isValidSequence(input, output)) {
std::cout << "Output sequence is valid.\n";
} else {
std::cout << "Output sequence is invalid.\n";
}
return 0;
}
```
在这个例子中,`isValidSequence`函数会判断给定的出栈序列是否能够成功还原输入序列。如果可以,它将返回`true`,否则返回`false`。
阅读全文