#include <iostream> #include <stack> #include <vector> using namespace std; int main() { int n, x; vector<int> in, out; // 输入序列和输出序列 stack<int> st; // 模拟堆栈 cin >> n; for (int i = 0; i < n; ++i) { cin >> x; in.push_back(x); } for (int i = 0; i < n; ++i) { cin >> x; out.push_back(x); } int i = 0, j = 0, cnt = 0; // i,j分别表示输入序列和输出序列的指针,cnt表示出栈次数 while (i < n) { st.push(in[i++]); // 将输入序列的元素压入堆栈 while (!st.empty() && st.top() == out[j]) { // 如果堆栈不为空且堆栈顶部元素等于输出序列的当前元素 st.pop(); // 将堆栈顶部元素弹出 j++; // 输出序列的指针向后移动一位 cnt++; // 记录出栈次数 } } if (st.empty()) { // 如果堆栈为空,则说明输出序列可以由输入序列输出 cout << cnt << endl; } else { // 否则输出0 cout << 0 << endl; } return 0; }吧这段代码改成c语言
时间: 2024-01-07 19:03:18 浏览: 94
把 vector、stack 换成数组,cin、cout 换成 scanf、printf 即可。
以下是改写后的代码:
```c
#include <stdio.h>
#define MAXN 1000
int main() {
int n, x;
int in[MAXN], out[MAXN]; // 输入序列和输出序列
int top = 0; // 模拟堆栈
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", &x);
in[i] = x;
}
for (int i = 0; i < n; ++i) {
scanf("%d", &x);
out[i] = x;
}
int i = 0, j = 0, cnt = 0; // i,j分别表示输入序列和输出序列的指针,cnt表示出栈次数
while (i < n) {
in[top++] = in[i++]; // 将输入序列的元素压入堆栈
while (top > 0 && in[top - 1] == out[j]) { // 如果堆栈不为空且堆栈顶部元素等于输出序列的当前元素
top--; // 将堆栈顶部元素弹出
j++; // 输出序列的指针向后移动一位
cnt++; // 记录出栈次数
}
}
if (top == 0) { // 如果堆栈为空,则说明输出序列可以由输入序列输出
printf("%d\n", cnt);
} else { // 否则输出0
printf("0\n");
}
return 0;
}
```
阅读全文