Python之简单理解栈和队列

一、栈

1、栈的概念

栈是一种后进先出(LIFO, Last In First Out)的数据结构。

想象一摞盘子:

  • 你只能往最上面放盘子(入栈 / push)

  • 也只能从最上面拿盘子(出栈 / pop)

  • 最晚放上去的,最先被拿走

2、用列表的方法实现栈

3、示例:栈基础语法演示

python 复制代码
stack = []          # 空栈

stack.append(1)     # 入栈 1
print(stack)        # [1]

stack.append(2)     # 入栈 2
print(stack)        # [1, 2]

stack.append(3)     # 入栈 3
print(stack)        # [1, 2, 3]

top = stack.pop()   # 出栈 → 拿走最后一个
print(top)          # 3
print(stack)        # [1, 2]

top = stack.pop()   # 再出栈
print(top)          # 2
print(stack)        # [1]

print(stack[-1])    # 看栈顶,不删除 → 1

运行过程:

append(1): 1 放一个

append(2): 1, 2 再放一个

append(3): 1, 2, 3 再放一个

pop(): 1, 2 拿走 3(最后放的先被拿走)

pop(): 1 拿走 2

4、图文概括

二、队列

1、队列的概念

队列是一种先进先出(FIFO, First In First Out)的数据结构。

想象排队买奶茶:

  • 先来的人先买到(先进先出)

  • 后来的人后买到

  • 新来的人只能排在队尾

  • 买到的人从队头离开

2、单线程,推荐用collections.deque创建队列

(1)示例1:队列基础语法演示
python 复制代码
from collections import deque

q = deque()          # 空队列

q.append(1)          # 入队 1
print(q)             # deque([1])

q.append(2)          # 入队 2
print(q)             # deque([1, 2])

q.append(3)          # 入队 3
print(q)             # deque([1, 2, 3])

first = q.popleft()  # 出队 → 拿走最前面的
print(first)         # 1
print(q)             # deque([2, 3])

first = q.popleft()  # 再出队
print(first)         # 2
print(q)             # deque([3])

print(q[0])          # 看队头,不删除 → 3

运行过程:

append(1): 1 1 来排队

append(2): 1, 2 2 排到队尾

append(3): 1, 2, 3 3 排到队尾

popleft(): 2, 3 1 买完走了(最先来的先走)

popleft(): 3 2 买完走了

(2)示例2:打印任务队列
python 复制代码
from collections import deque

print_queue = deque()

# 三个人陆续提交打印任务
print_queue.append("小明的文档")
print_queue.append("小红的图片")
print_queue.append("小刚的表格")

print("当前排队:", print_queue)

# 打印机逐个处理
while print_queue:
    job = print_queue.popleft()
    print(f"正在打印:{job}")

print("所有任务完成!")

运行结果:

当前排队: '小明的文档', '小红的图片', '小刚的表格'

正在打印:小明的文档

正在打印:小红的图片

正在打印:小刚的表格

所有任务完成!

3、多线程,推荐用线程安全的队列 queue.Queue

python 复制代码
import queue
import threading
import time

q = queue.Queue()

def producer():
    for i in range(5):
        q.put(i)                    # 入队
        print(f"生产:{i}")
        time.sleep(0.3)

def consumer():
    while True:
        item = q.get()              # 出队
        print(f"消费:{item}")
        q.task_done()

t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer, daemon=True)
t1.start(); t2.start()
t1.join()
time.sleep(1)

4、图文概括

相关推荐
lupai1 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
水水不水啊2 小时前
告别杂乱的调试窗口:我用 Python + WebView 写了一个现代化串口助手
python·测试工具·嵌入式·嵌入式开发·串口调试·串口助手
三水写代码2 小时前
手写一个 Claude Code(1):从 Agent Loop 到工具、权限、Hooks 与任务规划
python·ai编程·claude·ai agent·claudecode
m0_547486662 小时前
《Python高级编程》全套PPT课件2026(北京理工大学)
python·pycharm
Elaine3362 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
EatFan2 小时前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
xfan_me3 小时前
维修保养记录精准版 API 对接实战指南
java·大数据·python
海上小飞龙3 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
XiaoMaqqqq3 小时前
目前知名的IP驱动产业新场景新工具有哪些
网络·python·网络协议·tcp/ip