栈的扩展与创新:探索栈的拓展功能与新应用
发布时间: 2024-08-23 20:45:35 阅读量: 17 订阅数: 32
![栈的扩展与创新:探索栈的拓展功能与新应用](https://media.geeksforgeeks.org/wp-content/uploads/20190828194629/ADT.jpg)
# 1. 栈的基本概念和数据结构**
栈是一种后进先出(LIFO)的数据结构,它允许在栈顶进行插入和删除操作。栈通常使用数组或链表实现。
**数组实现:**
```python
class Stack:
def __init__(self, size):
self.stack = [None] * size
self.top = -1
def push(self, item):
if self.top == len(self.stack) - 1:
raise IndexError("Stack is full")
self.top += 1
self.stack[self.top] = item
def pop(self):
if self.top == -1:
raise IndexError("Stack is empty")
item = self.stack[self.top]
self.top -= 1
return item
```
**链表实现:**
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.head = None
def push(self, item):
new_node = Node(item)
new_node.next = self.head
self.head = new_node
def pop(self):
if self.head is None:
raise IndexError("Stack is empty")
item = self.head.data
self.head = self.head.next
return item
```
# 2. 栈的拓展功能
### 2.1 栈的动态扩展
#### 2.1.1 数组扩容
**原理:**
数组扩容是通过重新分配一个更大的数组,将原数组中的元素拷贝到新数组中来实现的。
**代码块:**
```python
def expand_array(array, new_size):
"""
扩容数组
:param array: 原数组
:param new_size: 新数组的大小
:return: 扩容后的数组
"""
new_array = [None] * new_size
for i in range(len(array)):
new_array[i] = array[i]
return new_array
```
**逻辑分析:**
1. 创建一个新数组 `new_array`,大小为 `new_size`。
2. 遍历原数组 `array`,将每个元素拷贝到 `new_array` 中。
3. 返回扩容后的数组 `new_array`。
**参数说明:**
* `array`:原数组
* `new_size`:新数组的大小
#### 2.1.2 链表扩容
**原理:**
链表扩容是通过在链表末尾添加新的节点来实现的。
**代码块:**
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
"""
在链表末尾添加一个节点
:param data: 节点数据
"""
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
```
**逻辑分析:**
1. 创建一个新的节点 `new_node`,并设置其数据为 `data`。
2. 如果链表为空,则将 `new_node` 设置为链表的头节点。
3. 否则,遍历链表,找到最后一个节点。
4. 将最后一个节点的 `next` 指针指向 `n
0
0