假设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法要对非正常情况(例如入栈满等)给出相应的报错信息及处理
时间: 2023-05-29 19:02:29 浏览: 248
1. 初始化一个空栈stack,和一个计数器count=0。
2. 从键盘输入整数序列,依次取出每个整数ai,进行以下判断:
- 如果ai不等于-1,则将其进栈,并将count加1。
- 如果ai等于-1,则判断栈是否为空,若为空,则输出错误信息并退出程序;否则,弹出栈顶元素并输出,同时将count减1。
- 如果输入的整数数量超过了设定的最大值,即count大于等于设定的最大值,那么输出错误信息并退出程序。
3. 若整个序列输入结束后,栈不为空,则依次弹出栈顶元素并输出,直至栈为空。
4. 程序结束。
以下是示例代码实现(以输入5个整数为例,可根据需要修改):
```python
class Stack:
def __init__(self, capacity):
self.capacity = capacity # 栈的容量
self.items = [] # 栈的存储
self.top = -1 # 栈顶指针
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.capacity - 1
def push(self, item):
if self.is_full():
print("Error: Stack is full.")
return False
else:
self.top += 1
self.items.append(item)
return True
def pop(self):
if self.is_empty():
print("Error: Stack is empty.")
return None
else:
self.top -= 1
return self.items.pop()
def main():
capacity = 5 # 栈的容量
stack = Stack(capacity)
count = 0 # 计数器
for i in range(capacity):
ai = int(input("请输入第%d个整数:" % (i + 1)))
if ai != -1:
if stack.push(ai): # 入栈成功
count += 1
else:
if stack.is_empty(): # 栈为空
print("Error: Stack is empty.")
break
else:
item = stack.pop() # 弹出栈顶元素
print("弹出的整数为:%d" % item)
count -= 1
if count >= capacity: # 栈已满
print("Error: Stack is full.")
break
# 若整个序列输入结束后,栈不为空,则依次弹出栈顶元素并输出,直至栈为空
while not stack.is_empty():
item = stack.pop()
print("弹出的整数为:%d" % item)
if __name__ == '__main__':
main()
```
注意:由于Python中没有栈结构,以上代码使用了自定义的Stack类来实现栈的基本操作。
阅读全文