给你一个长度为n的数组a和一个大小为m的栈,按顺序将数组a中的每个数放入栈,当栈满的时候再将栈中所有数拿出,重复这个操作直到数组a的末尾。此时如果栈中还有数就将其拿出,问拿出的所有数的顺序是什么。#include<bits/stdc++.h> using namespace std; void push(int s[],int a,int b){ a++; s[a]=b; } void pop(int s[],int a,int b){ a=s[b]; b--; } int main() { int n,m; cin>>n>>m; int a[n+1]; int top=0; int y; for(int i=0;i<n;i++){ if(m==i+1){ for(int j=0;j<m;j++){ pop(a[i+j],y,top); cout>>y; } cin>>y; push(a[i],top,y); } cin>>y; push(a[i],top,y); } return 0; }
时间: 2023-07-31 12:10:08 浏览: 92
这段代码存在一些问题。首先,将栈中的所有数拿出的操作应该在栈满时进行,而不是在栈满后进行。另外,你在使用pop函数时传入的参数有误,应该传入栈数组a和栈顶指针top,而不是栈数组a、一个变量y和栈顶指针top。此外,输出语句应该使用cout,而不是cout>>。下面是修改后的代码:
```cpp
#include <iostream>
using namespace std;
void push(int s[], int& top, int b) {
s[++top] = b;
}
int pop(int s[], int& top) {
return s[top--];
}
int main() {
int n, m;
cin >> n >> m;
int a[n + 1];
int top = 0;
int y;
for (int i = 0; i < n; i++) {
cin >> y;
push(a, top, y);
if (top == m) {
for (int j = 0; j < m; j++) {
y = pop(a, top);
cout << y << " ";
}
}
}
while (top > 0) {
y = pop(a, top);
cout << y << " ";
}
return 0;
}
```
这段代码会按照题目要求,依次将数组中的数放入栈中,并在栈满时将栈中的数依次取出,并输出拿出的所有数的顺序。
阅读全文