给定一个栈的元素数量n入栈顺序为1到n再给一个出栈序列你能否判断这是不是一个合法的出栈序列并在c++中给出相应代码?
可以利用栈来模拟出栈过程,具体步骤如下:
- 定义一个栈和一个指针i,初始值为0。
- 遍历出栈序列中的每个元素,记为x。
- 如果栈为空或栈顶元素不等于x,则将指针i后移,将1~i中未入栈的元素依次入栈,直到入栈元素等于x或者i等于n。
- 如果栈顶元素等于x,则将栈顶元素出栈,指针i后移。
- 如果遍历完出栈序列后栈不为空,则出栈序列不合法;否则出栈序列合法。
以下是相应的c++代码实现:
#include <iostream>
#include <stack>
using namespace std;
bool checkStackSequence(int n, int* popSequence) {
stack<int> s;
int i = 0; // 指向未入栈的第一个元素
for (int j = 0; j < n; j++) { // 遍历出栈序列
while (s.empty() || s.top() != popSequence[j]) { // 如果栈为空或栈顶元素不等于出栈序列中的元素
if (i == n) return false; // 所有元素都已经入栈,出栈序列非法
s.push(++i); // 将1~i中未入栈的元素依次入栈
}
s.pop(); // 栈顶元素等于出栈序列中的元素,出栈
}
return s.empty(); // 如果栈为空,出栈序列合法;否则出栈序列非法
}
int main() {
int n = 5;
int popSequence[5] = {4, 5, 3, 2, 1};
if (checkStackSequence(n, popSequence)) {
cout << "Valid" << endl;
} else {
cout << "Invalid" << endl;
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/K8P 著作权归作者所有。请勿转载和采集!