一、栈
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、图文概括
