已知n辆列车的编号为1~n,在栈式结构的站台,进站顺序为1,2,…,n。编程实现:给定一个出栈序列,判断是否合法。给出完整能运行的c++代码
时间: 2024-10-09 12:06:24 浏览: 48
在栈式数据结构中,为了判断一个给定的出栈序列是否合法,我们需要模拟列车按编号依次进入栈顶然后按照编号顺序出栈的过程。如果出栈序列能够保证每个列车都是在它们之前的所有列车都出栈之后才出栈,那么这个序列就是合法的。
这里是一个简单的C++代码实现:
```cpp
#include <iostream>
#include <stack>
bool isValid(int* s, int n) {
std::stack<int> trainStack;
// 将列车逐个入栈
for (int i = 0; i < n; ++i) {
trainStack.push(i + 1);
}
// 检查出栈序列是否合法
for (int i = 0; i < n; ++i) {
if (trainStack.top() != s[i] && trainStack.empty()) {
return false; // 如果栈空了但当前元素不是最小的,直接返回false
} else if (trainStack.top() == s[i]) {
trainStack.pop(); // 出栈当前元素
} else {
break; // 如果当前元素大于栈顶元素,说明非法,提前结束检查
}
}
return trainStack.empty(); // 如果所有列车都出栈完毕,返回true,否则返回false
}
int main() {
int trains[5] = {7, 1, 3, 6, 4};
int n = sizeof(trains) / sizeof(trains[0]);
bool result = isValid(trains, n);
if (result) {
std::cout << "出栈序列合法" << std::endl;
} else {
std::cout << "出栈序列不合法" << std::endl;
}
return 0;
}
```
在这个代码中,我们首先将列车编号从小到大推入栈中,然后遍历出栈序列,每出栈一个元素,我们就检查栈顶元素是否与当前出栈的列车匹配。如果不匹配或者栈已为空,那么序列就不是合法的。如果所有列车都出栈且栈为空,说明序列合法。
阅读全文