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

相关推荐
段一凡-华北理工大学6 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI7 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静8 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静8 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个9 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下10 小时前
3.基础语法(3)
python
深蓝AI11 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python
心祭丫丫11 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了12 小时前
Skill 索引瘦身与渐进加载
python
贾公子12 小时前
检测链路的容量规划——用 Little's Law 算清 QPS、并发与积压
后端·python