赞
踩
在Python中,可以使用列表(List)数据结构来方便地实现栈(Stack)和队列(Queue)这两种重要的数据结构。栈和队列都是基于先进后出(FILO, First In Last Out)和先进先出(FIFO, First In First Out)原则的数据结构,但它们的应用场景和特性有所不同。
栈是一种后进先出(LIFO, Last In First Out)的数据结构,只允许在栈顶进行添加(push)或删除(pop)元素的操作。使用Python的列表实现栈时,可以利用列表的末尾作为栈顶。
python复制代码
class Stack: | |
def __init__(self): | |
self.items = [] | |
def push(self, item): | |
self.items.append(item) | |
def pop(self): | |
if not self.is_empty(): | |
return self.items.pop() | |
else: | |
return None | |
def peek(self): | |
if not self.is_empty(): | |
return self.items[-1] | |
else: | |
return None | |
def is_empty(self): | |
return len(self.items) == 0 | |
# 使用示例 | |
stack = Stack() | |
stack.push(1) | |
stack.push(2) | |
print(stack.peek()) # 输出: 2 | |
print(stack.pop()) # 输出: 2 | |
print(stack.is_empty()) # 输出: False |
队列是一种先进先出(FIFO)的数据结构,只允许在队列的一端进行添加(enqueue)操作,在另一端进行删除(dequeue)操作。使用Python的列表实现队列时,可以将列表的开头视为队列的前端,末尾视为队列的后端。然而,由于列表在头部插入和删除元素的时间复杂度为O(n),因此这种实现方式效率并不高。更高效的实现方式是使用collections模块中的deque(双端队列)。
python复制代码
class Queue: | |
def __init__(self): | |
self.items = [] | |
def enqueue(self, item): | |
self.items.append(item) | |
def dequeue(self): | |
if not self.is_empty(): | |
return self.items.pop(0) | |
else: | |
return None | |
def is_empty(self): | |
return len(self.items) == 0 | |
def size(self): | |
return len(self.items) | |
# 使用示例 | |
queue = Queue() | |
queue.enqueue(1) | |
queue.enqueue(2) | |
print(queue.dequeue()) # 输出: 1 | |
print(queue.is_empty()) # 输出: False |
python复制代码
from collections import deque | |
class Queue: | |
def __init__(self): | |
self.items = deque() | |
def enqueue(self, item): | |
self.items.append(item) | |
def dequeue(self): | |
if not self.is_empty(): | |
return self.items.popleft() | |
else: | |
return None | |
def is_empty(self): | |
return len(self.items) == 0 | |
def size(self): | |
return len(self.items) | |
# 使用示例 | |
queue = Queue() | |
queue.enqueue(1) | |
queue.enqueue(2) | |
print(queue.dequeue()) # 输出: 1 | |
print(queue.is_empty()) # 输出: False |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。