从键盘输入一整数序列a1,a2,a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠ -1时,将ai进栈;当ai= -l时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息
时间: 2023-06-08 07:08:24 浏览: 208
好的,我明白了。以下是基于你的要求编写的算法:
1. 初始化一个空栈。
2. 从键盘输入一个整数序列a1,a2,a3,…,an,并且对于每一个输入的整数ai,执行以下操作:
- 当ai≠-1时,将ai进栈。
- 当ai=-1时,取出栈顶元素top,输出top,并且出栈。若栈为空,则提示“栈为空,无法出栈”。
- 若输入的整数ai既不是-1也不是整数,则提示“输入的ai无效,忽略该输入”。
- 若栈已满,则提示“栈已满,无法再进栈”。
3. 当所有的输入已经处理完毕,输出“处理完毕”。
以下是代码实现:
```python
# 定义栈结构
class Stack:
def __init__(self, maxsize):
self.maxsize = maxsize
self.stack = []
def push(self, item):
if len(self.stack) >= self.maxsize:
print('栈已满,无法再进栈')
else:
self.stack.append(item)
def pop(self):
if not self.is_empty():
return self.stack.pop()
else:
print('栈为空,无法出栈')
return None
def is_empty(self):
return self.stack == []
def is_full(self):
return len(self.stack) == self.maxsize
# 主程序
def main():
# 初始化栈
s = Stack(50)
while True:
# 从键盘输入整数
try:
n = int(input())
# 判断输入是否是合法的整数
if n != -1 and type(n) == int:
# 若栈未满,则将元素压入栈中
if not s.is_full():
s.push(n)
else:
print('栈已满,无法再进栈')
elif n == -1:
# 若栈非空,则弹出栈顶元素
if not s.is_empty():
top = s.pop()
print(top)
else:
print('栈为空,无法出栈')
else:
print('输入的n无效,忽略该输入')
except ValueError:
print('输入的n无效,忽略该输入')
# 处理完毕
if n == -1:
break
print('处理完毕')
# 运行主程序
if __name__ == '__main__':
main()
```
希望这个算法能满足你的需求。如果你还有任何问题,可以继续问我。
阅读全文