第一关:实现一个链接存储的栈
时间: 2024-12-27 20:31:17 浏览: 14
在计算机科学中,我们可以使用链表数据结构来实现一个栈。链表栈的基本原理类似于数组栈,但是由于链表可以动态增长,所以在空间效率上可能会更高一些。下面是简单的步骤:
1. **定义节点**:创建一个名为`Node`的类,它包含两个属性:数据`data`和指向下一个节点的引用`next`。
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
```
2. **定义栈类**:`Stack`类包含栈顶指针`top`,初始化时默认为空。
```python
class Stack:
def __init__(self):
self.top = None
```
3. **基本操作**:
- **入栈** (`push()`): 当添加新元素到栈顶时,创建一个新的`Node`,将其设置为当前`top`并更新`top`为新节点。
```python
def push(self, item):
new_node = Node(item)
if not self.is_empty():
new_node.next = self.top
self.top = new_node
```
- **出栈** (`pop()`): 如果栈非空,删除并返回栈顶元素,然后将`top`向下移动一位。如果栈空,抛出异常。
```python
def pop(self):
if self.is_empty():
raise IndexError("Stack is empty")
popped_data = self.top.data
self.top = self.top.next
return popped_data
```
- **查看栈顶** (`peek()`): 返回栈顶元素而不移除,同样处理空栈的情况。
```python
def peek(self):
if self.is_empty():
return None
return self.top.data
```
- **判断是否为空** (`is_empty()`):检查栈顶是否为`None`。
```python
def is_empty(self):
return self.top is None
```
4. **其他辅助功能**: 可能还包括如`size()`获取栈中元素数量等方法。
阅读全文