基础数据结构:数组、字符串、链表、栈、队列、哈希表之python篇
·
1. 数组 (Array)
核心概念:就像一排连续的储物柜,每个柜子有编号(索引),放着东西。
- 特点:通过编号(索引)能瞬间找到东西(随机访问快);但在中间插入 / 删除东西时,后面的柜子都要移动位置(慢)。
- Python 实现:Python 中的
list列表本质上就是动态数组(自动扩容)。
python
运行
# 1. 创建数组
arr = [10, 20, 30, 40]
# 2. 访问 (通过索引,速度极快 O(1))
print(arr[0]) # 输出: 10
# 3. 修改
arr[1] = 200
# 4. 插入 (在中间插入很慢,因为后面的元素要往后挪 O(n))
arr.insert(2, 25) # 在索引2处插入25
# 5. 删除
arr.pop(1) # 删除索引1处的元素
2. 字符串 (String)
核心概念:就是一串字符,比如 "Hello"。
- 特点:在 Python 中,字符串是不可变的(Immutable)。这意味着你一旦创建了它,就不能直接修改里面的某个字,只能造一个新的。
python
运行
# 1. 创建
s = "Hello World"
# 2. 访问 (和数组一样用索引)
print(s[0]) # 输出: 'H'
# 3. 切片 (截取子串)
print(s[0:5]) # 输出: 'Hello'
# 4. 拼接 (产生新字符串)
s2 = s + "!"
# 注意:不能直接修改 s[0] = 'h',这会报错!
# 如果要改,只能重新造一个:
s = "h" + s[1:]
3. 链表 (Linked List)
核心概念:像一列火车,每节车厢(节点)装着货物(数据)和一个钩子(指针),钩子勾着下一节车厢。
- 特点:内存不是连续的。插入 / 删除东西很快(只要改一下钩子);但想找中间某节车厢,必须从车头一节一节往后找(慢)。
- Python 实现:需要自己定义一个
Node类。
python
运行
# 定义“车厢”类
class Node:
def __init__(self, data):
self.data = data # 装的货物
self.next = None # 钩子,默认指向下一个
# 简单的链表操作示例
# 1. 创建车厢
n1 = Node(10)
n2 = Node(20)
n3 = Node(30)
# 2. 把车厢连起来
n1.next = n2
n2.next = n3
# 3. 遍历链表 (必须从头开始走)
current = n1
while current:
print(current.data)
current = current.next
4. 栈 (Stack)
核心概念:像往弹夹里压子弹,或者往箱子里放书。
- 规则:后进先出 (LIFO)。最后放进去的,第一个拿出来。
- Python 实现:直接用
list即可。
python
运行
stack = []
# 1. 入栈 (Push):把东西放进去
stack.append("《西游记》")
stack.append("《红楼梦》")
stack.append("《三国演义》")
# 此时栈里: [西游记, 红楼梦, 三国演义] (三国演义在最上面)
# 2. 出栈 (Pop):把最上面的东西拿出来
book = stack.pop()
print(book) # 输出: 《三国演义》
# 3. 查看栈顶 (Peek)
print(stack[-1]) # 输出: 《红楼梦》
5. 队列 (Queue)
核心概念:像在食堂排队打饭。
- 规则:先进先出 (FIFO)。先来的先服务。
- Python 实现:为了效率,我们用
collections.deque(双端队列)。
python
运行
from collections import deque
# 创建队列
q = deque()
# 1. 入队 (Enqueue):人排到队尾
q.append("张三")
q.append("李四")
q.append("王五")
# 2. 出队 (Dequeue):队头的人走了
person = q.popleft()
print(person) # 输出: 张三
print(q) # 剩下: deque(['李四', '王五'])
6. 哈希表 (Hash Table / Dictionary)
核心概念:就像一本字典。通过 “偏旁部首”(哈希函数)直接翻到那一页,而不是从第一页开始找。
- 特点:存储的是 键值对 (Key-Value)。查找速度极快(平均 O (1))。
- Python 实现:直接用
dict字典。
python
运行
# 1. 创建哈希表 (字典)
# 这里 Key 是名字,Value 是电话号码
phone_book = {
"张三": 1380000,
"李四": 1391111
}
# 2. 访问 (通过 Key 直接找 Value,速度极快)
print(phone_book["张三"])
# 3. 插入/修改
phone_book["王五"] = 1362222 # 插入
phone_book["张三"] = 1389999 # 修改
# 4. 删除
del phone_book["李四"]
总结对比
表格
| 数据结构 | 优点 | 缺点 | 典型场景 |
|---|---|---|---|
| 数组 | 随机访问最快 | 中间插入删除慢 | 快速读取,已知索引 |
| 链表 | 插入删除快 | 查找慢 | 实现栈 / 队列,频繁增删 |
| 栈 | 后进先出 | - | 撤销操作,括号匹配 |
| 队列 | 先进先出 | - | 任务排队,消息队列 |
| 哈希表 | 查找 / 插入 / 删除都极快 | - | 快速查找,字典,缓存 |
更多推荐

所有评论(0)