下面是一个关于常见数据结构的教程,涵盖基本概念、实现和示例代码。
数据结构教程
1. 数组(Array)
概念:数组是一种线性数据结构,可以存储固定大小的相同类型元素,支持通过索引访问。
特点:
- 固定大小
- 访问速度快(O(1))
- 插入和删除操作复杂度为O(n)
Python示例:
码
# 创建数组
arr = [1, 2, 3, 4, 5]
# 访问元素
print(arr[0]) # 输出: 1
# 插入元素
arr.append(6) # 在末尾添加
print(arr) # 输出: [1, 2, 3, 4, 5, 6]
# 删除元素
arr.remove(3) # 删除值为3的元素
print(arr) # 输出: [1, 2, 4, 5, 6]
2. 链表(Linked List)
概念:链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
特点:
- 动态大小
- 插入和删除操作较快(O(1))
- 访问速度较慢(O(n))
Python示例:
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
def print_list(self):
curr = self.head
while curr:
# 使用示例
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.print_list() # 输出: 1 -> 2 -> 3 -> None
3. 栈(Stack)
概念:栈是一种后进先出(LIFO)的数据结构,只能在一端进行插入和删除操作。
特点:
- 只允许在栈顶进行操作
- 访问速度快(O(1))
- 插入和删除操作复杂度为O(1)
def push(self, data):
self.stack.append(data)
def pop(self):
if not self.is_empty():
return self.stack.pop()
return None
def peek(self):
return self.stack[-1] if not self.is_empty() else None
d
return len(self.stack) == 0
# 使用示例
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop()) # 输出: 3
print(s.peek()) # 输出: 2
4. 队列(Queue)
概念:队列是一种先进先出(FIFO)的数据结构,元素从一端入队,从另一端出队。
特点:
- 只允许在队列的两端进行操作
- 插入和删除操作复杂度为O(1)
def __init__(self):
self.queue = deque()
def enqueue(self, data):
self.queue.append(data)
def dequeue(self):
if not self.is_empty():
return self.queue.popleft()
return None
def is_empty(self):
return len(self.queue) == 0
# 使用示例
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue()) # 输出: 1
5. 哈希表(Hash Table)
概念:哈希表是一种以键值对形式存储数据的结构,使用哈希函数将键映射到数组的索引。
特点:
- 快速查找(O(1))
- 插入和删除操作复杂度为O(1)
- 可能发生哈希冲突
Python示例:
def __init__(self):
self.table = {}
def insert(self, key, value):
self.table[key] = value
def get(self, key):
return self.table.get(key, None)
def remove(self, key):
if key in self.table:
del self.table[key]
# 使用示例
ht = HashTable()
ht.insert('name', 'Alice')
ht.insert('age', 30)
print(ht.get('name')) # 输出: Alice
6. 树(Tree)
概念:树是一种层次数据结构,由节点组成,其中一个节点是根节点,其他节点通过边连接。
特点:
- 动态大小
- 查找、插入和删除操作复杂度为O(log n)(平衡树)
Python示例:
self.right = None
self.val = key
class BinaryTree:
def __init__(self):
self.root = None
def insert(self, root, key):
if root is None:
return TreeNode(key)
else:
if root.val < key:
root.right = self.insert(root.right, key)
else:
root.left = self.insert(root.left, key)
return ro ot
def inorder(self, root):
return self.inorder(root.left) + [root.val] + self.inorder(root.right) if root else []
# 使用示例
bt = BinaryTree()
bt.root = bt.insert(bt.root, 5)
bt.insert(bt.root, 3)
bt.insert(bt.root, 7)
print(bt.inorder(bt.root)) # 输出: [3, 5, 7]
7. 图(Graph)
概念:图是一种非线性数据结构,由一组顶点和连接这些顶点的边组成。
特点:
- 可以是有向图或无向图
- 适用于网络、关系等数据
Python示例:
self.graph = {}
def add_edge(self, u, v):
if u not in self.graph:
self.graph[u] = []
self.graph[u].append(v)
def print_graph(self):
for vertex in self.graph:
print(vertex, "->", self.graph[vertex])
# 使用示例
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.print_graph() # 输出: 0 -> [1, 2] 1 -> [2]
更多详细内容请访问
Python实现常用数据结构详解与应用资源-CSDN文库 https://download.csdn.net/download/xiaoxingkongyuxi/89826575