定义一个两栈共享空间的类,实现以下操作:插入、删除、判断某个栈是否栈空、读取某个栈栈顶元素。 要求实现完整程序,有必要的结果输出。 两个栈中元素值和个数自定。
时间: 2024-10-18 12:21:29 浏览: 20
为了实现一个两栈共享空间的类,我们可以创建一个名为`SharedStack`的类,其中包含两个队列(可以视为特殊的栈),一个用于存储数据,另一个作为辅助。这里我们使用Python语言为例,因为其标准库提供了方便的队列操作。
```python
from collections import deque
class SharedStack:
def __init__(self):
self.stack1 = deque()
self.stack2 = deque()
# 插入操作:将元素添加到当前栈为空的那一个
def push(self, value):
if not self.stack1 and not self.stack2:
self.stack1.append(value)
else:
self.stack2.append(value)
# 删除操作:从非空栈中弹出元素,如果两个都为空则抛出异常
def pop(self):
if not self.stack1 and not self.stack2:
raise Exception("Both stacks are empty.")
elif not self.stack1:
return self.stack2.pop()
else:
return self.stack1.popleft()
# 判断栈是否为空
def is_empty(self):
return not (self.stack1 or self.stack2)
# 读取栈顶元素
def top(self):
if not self.is_empty():
if not self.stack1:
return self.stack2[0]
else:
return self.stack1[-1]
else:
raise Exception("Stack is empty.")
# 示例使用
shared_stack = SharedStack()
shared_stack.push(1) # 插入1
shared_stack.push(2) # 插入2
print("Top element:", shared_stack.top()) # 输出2
print("Pop:", shared_stack.pop()) # 输出2
if shared_stack.is_empty(): # 判空
print("Stack is empty.")
else:
print("Not empty.")
try:
shared_stack.pop() # 尝试弹出空栈会报错
except Exception as e:
print(e)
```
这个类实现了基本的插入、删除、判断空以及读取栈顶元素的操作。当一个栈满时,我们将元素转移到另一个栈。如果尝试从空栈中删除元素,会引发异常。你可以根据需要调整这个类的功能。
阅读全文