堆栈(Stack)是一种线性数据结构,在计算机科学中有着广泛的应用。它遵循后进先出(Last In First Out, LIFO)的原则进行操作。本文将详细介绍堆栈的基本操作及其具体实现方法。
堆栈主要由以下几个基本操作组成:
使用数组来实现一个简单的堆栈。我们可以将堆栈视为固定大小的数组,其中有一个指针指向当前的栈顶位置。
class ArrayStack:
def __init__(self, capacity=10):
self.capacity = capacity # 堆栈的最大容量
self.stack = [None] * self.capacity
self.top = -1 # 标识堆栈顶部的位置
def push(self, value):
if self.top + 1 < self.capacity:
self.top += 1
self.stack[self.top] = value
else:
raise Exception("Stack Overflow")
def pop(self):
if self.top == -1:
raise Exception("Stack Underflow")
value = self.stack[self.top]
self.top -= 1
return value
def peek(self):
if self.top == -1:
raise Exception("Stack is empty")
return self.stack[self.top]
def is_empty(self):
return self.top == -1
def size(self):
return self.top + 1
链表可以提供更灵活的堆栈操作。通过定义一个节点结构和一些辅助方法,我们可以轻松地模拟堆栈的行为。
class Node:
def __init__(self, value):
self.value = value
self.next = None
class LinkedListStack:
def __init__(self):
self.top = None # 指向链表的头节点(即堆栈顶部)
def push(self, value):
new_node = Node(value)
new_node.next = self.top
self.top = new_node
def pop(self):
if not self.top:
raise Exception("Stack Underflow")
popped_value = self.top.value
self.top = self.top.next
return popped_value
def peek(self):
if not self.top:
raise Exception("Stack is empty")
return self.top.value
def is_empty(self):
return self.top is None
def size(self):
count = 0
current_node = self.top
while current_node:
count += 1
current_node = current_node.next
return count
堆栈在计算机科学中有着广泛的应用,例如:
通过上述实现方法,我们可以灵活地选择合适的数据结构和方法来构建不同的堆栈应用。无论是用于简单数据的临时存储还是更复杂的场景如递归处理,合理使用堆栈都能提高程序的整体效率与可维护性。