数据结构是算法的基石,掌握核心数据结构能显著提升代码效率和问题解决能力。本文将详解数组、链表、栈、队列、哈希表、集合等基础数据结构,从底层原理到应用场景,搭配LeetCode经典题目,助你快速构建数据结构知识体系!
操作 | 时间复杂度 |
---|---|
访问元素 | O(1) |
插入/删除元素 | O(n)(需移动后续元素) |
LeetCode例题:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class DoublyListNode:
def __init__(self, val=0, prev=None, next=None):
self.val = val
self.prev = prev
self.next = next
LeetCode例题:
操作 | 时间复杂度 |
---|---|
入栈(push) | O(1) |
出栈(pop) | O(1) |
代码示例:
stack = []
stack.append(1) # 入栈
top = stack[-1] # 查看栈顶
stack.pop() # 出栈
from collections import deque
queue = deque()
queue.append(1) # 入队
front = queue[0] # 查看队首
queue.popleft() # 出队
import heapq
heap = []
heapq.heappush(heap, 3) # 插入元素
top = heap[0] # 查看堆顶
heapq.heappop(heap) # 弹出堆顶
操作 | 平均时间复杂度 | 最坏时间复杂度 |
---|---|---|
插入 | O(1) | O(n) |
删除 | O(1) | O(n) |
查询 | O(1) | O(n) |
Python字典示例:
hash_map = {}
hash_map["key"] = "value" # 插入
val = hash_map.get("key", default=None) # 查询
操作 | 平均时间复杂度 |
---|---|
添加元素 | O(1) |
删除元素 | O(1) |
查询元素 | O(1) |
Python集合示例:
s = set()
s.add(1) # 添加元素
s.discard(1) # 删除元素
if 1 in s: # 查询元素
print("存在")
数据结构 | 优点 | 缺点 | 典型应用 |
---|---|---|---|
数组 | 随机访问快 | 插入/删除慢,大小固定 | 矩阵运算、有序数据存储 |
链表 | 插入/删除快 | 随机访问慢 | 实现队列、LRU缓存 |
栈 | 后进先出逻辑清晰 | 功能受限 | 函数调用、括号匹配 |
队列 | 先进先出符合公平性 | 普通队列出队效率低 | 任务调度、BFS算法 |
哈希表 | 查找极快 | 内存占用大,无序 | 缓存、词频统计 |
集合 | 去重和查询高效 | 无法存储键值对 | 唯一性校验、集合运算 |
list
、dict
),再考虑自定义结构。你在学习数据结构时遇到过哪些难题?欢迎留言讨论!
如果觉得本文对你有帮助,点赞⭐收藏关注,支持更多干货输出!
相关LeetCode练习推荐: