设从键盘输入一整数的序列:a1,a2,...,an,试编写算法实现:用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai等于-1时,输出栈顶整数并出栈。算法应对异常情况(栈满)给出相应的提示。
时间: 2024-05-09 20:21:54 浏览: 101
从键盘输入一个三位整数,逆序输出。如输入123,输出321。
好的,我可以为您解答这个问题。以下是使用栈结构实现输入整数序列,输出栈顶整数的简单算法:
1. 初始化一个栈结构
2. 循环输入整数序列,如果当前整数不是-1,就把它压入栈结构中,否则就弹出栈顶元素并输出。
3. 在将整数压入栈之前,要先检查栈是否已满。如果栈已满,则提示栈满错误。
下面是实现这个算法的代码示例:
```python
class StackOverflowError(Exception):
pass
class Stack:
def __init__(self, capacity):
self.capacity = capacity
self.top = -1
self.data = [0] * capacity
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.capacity - 1
def push(self, x):
if self.is_full():
raise StackOverflowError('Stack overflow')
self.top += 1
self.data[self.top] = x
def pop(self):
if self.is_empty():
return None
x = self.data[self.top]
self.top -= 1
return x
def topElem(self):
if self.is_empty():
return None
return self.data[self.top]
def size(self):
return self.top + 1
def main():
n = int(input('Please input the capacity of the stack: '))
s = Stack(n)
while True:
x = int(input('Please input a number(-1 for pop): '))
if x == -1:
if s.is_empty():
print('Stack is empty')
else:
print('Pop element: ', s.pop())
else:
try:
s.push(x)
except StackOverflowError as e:
print(e)
if __name__ == '__main__':
main()
```
希望这个算法对您有所帮助!
阅读全文