Python栈、队列、串

一、栈(Stack)

栈是一种后进先出(LIFO)的线性数据结构,只允许在一端(称为栈顶)进行插入和删除操作。

1、使用列表实现栈

stack = []  # 创建一个空栈

# 入栈操作 - O(1)
stack.append(10)  # 栈: [10]
stack.append(20)  # 栈: [10, 20]
stack.append(30)  # 栈: [10, 20, 30]

# 出栈操作 - O(1)
print(stack.pop())  # 输出: 30, 栈: [10, 20]
print(stack.pop())  # 输出: 20, 栈: [10]

# 查看栈顶元素 - O(1)
print(stack[-1])  # 输出: 10

# 判断栈是否为空
print(len(stack) == 0)  # 输出: False

2、使用deque实现栈(更高效)

from collections import deque

stack = deque()  # 创建栈

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

# 出栈
print(stack.pop())  # 输出: 2

栈的应用场景:

  • 函数调用栈
  • 表达式求值
  • 括号匹配检查
  • 浏览器的前进/后退功能

二、队列(Queue)

队列是一种先进先出(FIFO)的线性数据结构,在一端(队尾)插入,在另一端(队首)删除。

1、列表实现队列(不推荐)

queue = []  # 创建队列

# 入队 - O(1)
queue.append(10)  # 队列: [10]
queue.append(20)  # 队列: [10, 20]

# 出队 - O(n)(效率低,因为要移动所有元素)
print(queue.pop(0))  # 输出: 10, 队列: [20]

 2、使用deque实现队列(推荐)

from collections import deque

queue = deque()  # 创建队列

# 入队 - O(1)
queue.append(10)  # 队列: [10]
queue.append(20)  # 队列: [10, 20]

# 出队 - O(1)
print(queue.popleft())  # 输出: 10, 队列: [20]
print(queue.popleft())  # 输出: 20, 队列: []
print(queue)            # 输出:deque([])

3、优先队里(PriorityQueue)

from queue import PriorityQueue

pq = PriorityQueue()

# 插入元素 (自动排序)
pq.put((3, "低优先级"))
pq.put((1, "高优先级"))
pq.put((2, "中优先级"))

# 获取元素 (按优先级)
print(pq.get())  # 输出: (1, "高优先级")
print(pq.get())  # 输出: (2, "中优先级")
print(pq.qsize())# 输出:1

队列的应用场景

  • 任务调度
  • 消息队列
  • 广度优先搜索(BFS)
  • 打印机任务队列

三、串(String)

串是由零个或多个字符组成的有限序列,是编程中最常用的数据结构之一。

1、基本操作

s = "Hello, Python!"

# 长度 - O(1)
print(len(s))  # 输出: 14

# 索引访问 - O(1)
print(s[0])  # 输出: 'H'
print(s[-1])  # 输出: '!'

# 切片 - O(k) (k是切片长度)
print(s[7:13])  # 输出: 'Python'

2、常用方法

# 查找 - O(n)
print(s.find("Py"))  # 输出: 7 (首次出现位置)
print(s.find("Java"))  # 输出: -1 (未找到)

# 替换 - O(n)
print(s.replace("Python", "World"))  # 输出: "Hello, World!"

# 分割 - O(n)
print(s.split(","))  # 输出: ['Hello', ' Python!']

# 连接 - O(n)
print("-".join(["a", "b", "c"]))  # 输出: "a-b-c"

# 格式化
name = "Alice"
age = 25
print(f"{name} is {age} years old.")  # 输出: "Alice is 25 years old."

3、字符串不可变性

s = "hello"
# s[0] = "H"  # 会报错,字符串不可变

# 正确修改方式
s = "H" + s[1:]  # 创建新字符串,或使用字符串的replece方法
print(s)  # 输出: "Hello"

串的应用场景

  • 文本处理
  • 数据清洗
  • 模式匹配
  • 密码学算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值