c++写 给出一个堆栈的输入序列,试判断一个序列是否能够由这个堆栈输出。如果能,返回总的出栈次数,如果不能,返回0。序列的输入及输出都是从左往右。(输入输出序列皆为整数且没有重复的数字,如果一个数字在输入序列中没有出现,那么其在输出序列中也不会出现)
时间: 2024-02-01 10:15:54 浏览: 73
以下是 C++ 实现的代码:
```cpp
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int stack_sequence(vector<int> input, vector<int> output) {
stack<int> s;
int pop_count = 0; // 记录出栈次数
int i = 0, j = 0;
while (i < input.size() && j < output.size()) {
if (s.empty() || s.top() != output[j]) {
s.push(input[i]);
i++;
} else {
s.pop();
j++;
pop_count++;
}
}
while (j < output.size() && !s.empty() && s.top() == output[j]) {
s.pop();
j++;
pop_count++;
}
return j == output.size() ? pop_count : 0;
}
int main() {
vector<int> input = {1, 2, 3, 4, 5};
vector<int> output1 = {4, 5, 3, 2, 1};
vector<int> output2 = {4, 3, 5, 1, 2};
cout << stack_sequence(input, output1) << endl; // 输出 5
cout << stack_sequence(input, output2) << endl; // 输出 0
return 0;
}
```
其中 `stack_sequence` 函数接收输入序列 `input` 和输出序列 `output`,使用一个栈来模拟堆栈的出入操作。
首先遍历输入序列,将元素逐个压入栈中,如果栈顶元素和输出序列当前位置的元素相等,则将该元素出栈,并将输出序列的位置向后移动一位,同时增加出栈次数。如果遍历完输入序列后,输出序列的位置已经到了最后,并且栈顶元素和输出序列当前位置的元素相等,则将该元素出栈,并将输出序列的位置向后移动一位,同时增加出栈次数。最后判断输出序列的位置是否到了最后,如果是,则返回出栈次数,否则返回 0。
阅读全文