定义一个链栈的类,实现以下操作:插入、删除、判断栈是否栈空、读取栈栈顶元素、析构函数。 要求实现完整程序,有必要的结果输出。 两个栈中元素值和个数自定。
时间: 2024-10-18 20:23:19 浏览: 28
在Python中,我们可以定义一个链栈(Linked Stack)类,通过双向链表的方式来实现插入、删除、检查栈是否为空以及获取栈顶元素的操作。这里是一个简单的实现:
```python
class Node:
def __init__(self, value):
self.value = value
self.next = None
self.prev = None
class LinkedStack:
def __init__(self):
self.top = None
self.size = 0
# 插入元素到栈顶
def push(self, value):
new_node = Node(value)
if not self.is_empty():
new_node.next = self.top
self.top.prev = new_node
self.top = new_node
self.size += 1
# 删除并返回栈顶元素
def pop(self):
if self.is_empty():
return None
popped_value = self.top.value
self.top = self.top.prev
if self.top is not None:
self.top.next = None
else:
self.bottom = None
self.size -= 1
return popped_value
# 判断栈是否为空
def is_empty(self):
return self.top is None
# 读取栈顶元素,但不删除
def peek(self):
if self.is_empty():
print("Stack is empty")
else:
return self.top.value
# 析构函数(Python中无显式析构函数,但在类结束处相当于“清理”)
def __del__(self):
while self.top is not None:
temp = self.pop()
# 示例
def stack_operations(self):
self.push(5)
self.push(3)
self.push(7)
print("Stack:", [self.peek() for _ in range(self.size)])
self.pop()
print("After popping:", [self.peek() for _ in range(self.size)])
print("Is the stack empty? ", self.is_empty())
# 创建并测试链栈
stack = LinkedStack()
stack.stack_operations()
```
这个例子中,我们首先创建了一个`Node`类表示链表中的节点,然后在`LinkedStack`类中实现了所需的方法。`push`方法用于添加元素,`pop`方法用于移除并返回栈顶元素,`is_empty`方法检查栈是否为空,`peek`方法查看但不删除栈顶元素,`__del__`模拟了析构函数的行为。
最后,我们在`stack_operations`方法中演示了如何使用这个链栈,并输出了一些操作的结果。你可以根据需要修改这个例子中的元素和操作。
阅读全文