设从键密输入一整数的序列;a1, a2,a3..an,试编写 算法实现:用栈结构存储输入的整数,当ai*-1时,将ai进栈; 当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。 void InOutS(int s[maxsizel)
时间: 2024-05-03 17:18:39 浏览: 95
以下是实现该算法的代码:
```c++
#include <iostream>
using namespace std;
const int maxsize = 100; // 栈的最大容量
void InOutS(int s[maxsize], int n) {
int top = -1; // 栈顶指针,初始为-1
for (int i = 0; i < n; i++) {
int num;
cin >> num;
if (top == maxsize - 1) { // 栈已满
cout << "栈已满,无法继续入栈" << endl;
return;
}
if (num == -1) { // 弹出栈顶元素
if (top == -1) { // 栈为空
cout << "栈为空,无法继续弹出元素" << endl;
return;
}
cout << s[top] << " "; // 输出栈顶元素
top--; // 出栈
} else if (num < 0) { // 入栈
top++;
s[top] = num;
} else { // 非法输入
cout << "输入的数字必须为整数或-1" << endl;
return;
}
}
if (top != -1) { // 栈不为空
cout << "还有元素未弹出,请继续输入-1进行弹出" << endl;
}
}
int main() {
int s[maxsize];
int n;
cout << "请输入整数序列,以-1结束:" << endl;
cin >> n;
InOutS(s, n);
return 0;
}
```
该算法首先定义了一个栈结构,最大容量为100。然后通过遍历输入的整数序列,对于每个元素进行判断:
- 如果是-1,则弹出栈顶元素并输出;
- 如果小于0,则将其进栈;
- 如果大于等于0,则说明输入的数字不合法,给出相应信息并退出。
在入栈和出栈的过程中,需要判断栈是否已满或为空。若栈已满,则给出相应信息并结束程序;若栈为空,则给出相应信息并结束程序。在遍历完整个序列后,还需判断栈是否为空,若不为空,则给出相应信息。
阅读全文