栈的基本概念
栈是一种线性数据结构,遵循后进先出(LIFO)原则。元素的插入和删除只能在栈顶进行,栈底是固定的。栈的操作主要包括压栈(Push)和弹栈(Pop),还可以查看栈顶元素(Peek)。
栈的典型应用包括函数调用、表达式求值、括号匹配等。由于操作受限,栈的行为更容易预测,这也是“约束即是力量”的体现——通过限制操作范围,简化问题复杂度。
栈的实现方式
栈可以通过数组或链表实现。数组实现的栈需要预先分配固定大小的内存,而链表实现的栈可以动态扩展。
数组实现栈
class ArrayStack:
def __init__(self, capacity):
self.capacity = capacity
self.stack = [None] * capacity
self.top = -1
def push(self, item):
if self.top == self.capacity - 1:
raise Exception("Stack is full")
self.top += 1
self.stack[self.top] = item
def pop(self):
if self.top == -1:
raise Exception("Stack is empty")
item = self.stack[self.top]
self.top -= 1
return item
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
链表实现栈
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedListStack:
def __init__(self):
self.top = None
def push(self, item):
new_node = Node(item)
new_node.next = self.top
self.top = new_node
def pop(self):
if self.top is None:
raise Exception("Stack is empty")
item = self.top.data
self.top = self.top.next
return item
def peek(self):
if self.top is None:
raise Exception("Stack is empty")
return self.top.data
def is_empty(self):
return self.top is
30万+

被折叠的 条评论
为什么被折叠?



