3.8 Python3 列表当做队列/栈

        在 Python3 中,列表(list)可以很方便地用作栈(后进先出,LIFO),但作为队列(先进先出,FIFO)时效率较低(因为从列表头部操作的时间复杂度为 O(n))。推荐使用 collections.deque 实现高效队列操作。


目录

1. 将列表当作栈使用

2. 将列表当作 队列(Queue) 使用

2.1 将列表当作队列使用(不推荐)

2.2 使用 collections.deque 实现高效队列

3. 完整实例对比

3.1 栈的实例

3.2 队列的实例(推荐 deque)

3.3 关键区别总结


1. 将列表当作栈使用

        栈的核心操作(直接用列表实现)

        栈的特点是后进先出(LIFO)

stack = []  # 创建空栈

# 压入元素(栈顶)
stack.append(1)    # 栈: [1]
stack.append(2)    # 栈: [1, 2]

# 弹出元素(栈顶)
top_element = stack.pop()  # 返回 2,栈变为 [1]

# 查看栈顶元素(不弹出)
if stack:
    peek_element = stack[-1]  # 返回 1

# 检查是否为空
is_empty = len(stack) == 0    # False

# 获取栈大小
size = len(stack)             # 1

2. 将列表当作 队列(Queue) 使用

        队列的特点是先进先出(FIFO)

2.1 将列表当作队列使用(不推荐)

         列表的 .pop(0) 操作效率低(需移动所有元素)

queue = []  # 创建队列(用列表)

# 入队(队尾添加)
queue.append(1)  # 队列: [1]
queue.append(2)  # 队列: [1, 2]

# 出队(队首移除)
first_element = queue.pop(0)  # 返回 1,队列变为 [2]

# 查看队首元素(不移除)
if queue:
    front_element = queue[0]  # 返回 2

# 其他操作类似栈(检查空、大小)

2.2 使用 collections.deque 实现高效队列

   deque 的 popleft() 和 appendleft() 操作均为 O(1):

from collections import deque

queue = deque()  # 创建高效队列

# 入队(队尾添加)
queue.append(1)     # 队列: deque([1])
queue.append(2)     # 队列: deque([1, 2])

# 出队(队首移除)
first_element = queue.popleft()  # 返回 1,队列变为 deque([2])

# 查看队首元素(不移除)
if queue:
    front_element = queue[0]  # 返回 2

# 其他操作
is_empty = len(queue) == 0
size = len(queue)

3. 完整实例对比

3.1 栈的实例

stack = []
stack.append("a")
stack.append("b")
print("Stack:", stack)          # ['a', 'b']
print("Pop:", stack.pop())      # 'b'
print("Top:", stack[-1])        # 'a'
print("Size:", len(stack))      # 1

3.2 队列的实例(推荐 deque

from collections import deque
q = deque()
q.append("x")
q.append("y")
print("Queue:", q)              # deque(['x', 'y'])
print("Dequeue:", q.popleft())  # 'x'
print("Front:", q[0])           # 'y'
print("Size:", len(q))          # 1

3.3 关键区别总结

操作栈(用列表)队列(用 deque
添加元素append()append()
移除元素pop()popleft()
查看顶部list[-1]deque[0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值