Python数据结构与算法实现总结

360影视 日韩动漫 2025-04-30 14:25 2

摘要:def knapsack(weights, values, capacity):

学习数据结构与算法是编程的核心基础之一。以下是使用Python实现常见数据结构与算法的总结:

一、数据结构

1. 链表

节点定义

python

class Node:

def __init__(self, data):

self.data = data

self.next = None

链表操作:插入、删除、遍历。

2. 栈

实现(后进先出):

python

class Stack:

def __init__(self):

self.items =

def push(self, item):

self.items.append(item)

def pop(self):

return self.items.pop

def is_empty(self):

return len(self.items) == 0

3. 队列

实现(先进先出,使用链表):

python

class Queue:

def __init__(self):

self.head = None

self.tail = None

def enqueue(self, data):

new_node = Node(data)

if self.tail is None:

self.head = self.tail = new_node

else:

self.tail.next = new_node

self.tail = new_node

def dequeue(self):

if self.head is None:

return None

data = self.head.data

self.head = self.head.next

self.tail = None

return data

4. 树

二叉树节点

python

class TreeNode:

def __init__(self, val):

self.val = val

self.left = None

self.right = None

遍历(前序、中序、后序、层序):

python

# 前序遍历(递归)

def preorder(root):

if root:

print(root.val)

preorder(root.left)

preorder(root.right)

# 层序遍历(队列)

from collections import deque

def level_order(root):

if not root:

return

queue = deque([root])

result =

while queue:

level =

for _ in range(len(queue)):

node = queue.popleft

level.append(node.val)

if node.left:

queue.append(node.left)

if node.right:

queue.append(node.right)

result.append(level)

return result

5. 图

邻接表表示

python

graph = {

'A': ['B', 'C'],

'B': ['D'],

'C': ['E'],

'D': ['F'],

'E': ,

'F':

}

遍历

python

# DFS(递归)

def dfs(graph, node, visited):

if node not in visited:

print(node)

visited.add(node)

for neighbor in graph[node]:

dfs(graph, neighbor, visited)

# BFS(队列)

from collections import deque

def bfs(graph, start):

visited = set

queue = deque([start])

visited.add(start)

while queue:

node = queue.popleft

print(node)

for neighbor in graph[node]:

if neighbor not in visited:

visited.add(neighbor)

queue.append(neighbor)

6. 堆

使用heapq模块(最小堆):

python

import heapq

heap =

heapq.heappush(heap, 3)

heapq.heappush(heap, 1)

print(heapq.heappop(heap)) # 输出1

二、算法

1. 排序算法

快速排序

python

def quicksort(arr):

if len(arr)

return arr

pivot = arr[len(arr)//2]

left = [x for x in arr if x

middle = [x for x in arr if x == pivot]

right = [x for x in arr if x > pivot]

return quicksort(left) + middle + quicksort(right)

归并排序

python

def merge_sort(arr):

if len(arr)

return arr

mid = len(arr) // 2

left = merge_sort(arr[:mid])

right = merge_sort(arr[mid:])

return merge(left, right)

def merge(left, right):

result =

i = j = 0

while i

if left[i]

result.append(left[i])

i += 1

else:

result.append(right[j])

j += 1

result.extend(left[i:])

result.extend(right[j:])

return result

2. 查找算法

二分查找

python

def binary_search(arr, target):

low, high = 0, len(arr)-1

while low

mid = (low + high) // 2

if arr[mid] == target:

return mid

elif arr[mid]

low = mid + 1

else:

high = mid - 1

return -1

3. 动态规划

斐波那契数列

python

def fib(n):

a, b = 0, 1

for _ in range(n):

a, b = b, a + b

return a

0-1背包问题

python

def knapsack(weights, values, capacity):

n = len(weights)

dp = [[0]*(capacity+1) for _ in range(n+1)]

for i in range(1, n+1):

for w in range(1, capacity+1):

if weights[i-1] > w:

dp[i][w] = dp[i-1][w]

else:

dp[i][w] = max(dp[i-1][w], values[i-1] + dp[i-1][w - weights[i-1]])

return dp[n][capacity]

三、总结

时间复杂度:理解各算法的时间复杂度(如快速排序平均O(n log n),冒泡排序O(n²))。空间复杂度:如归并排序需要额外空间,原地排序更高效。应用场景:根据问题特点选择合适的数据结构与算法(如频繁查找用哈希表,有序数据用二分查找)。

通过实践和刷题(如LeetCode)加深理解,掌握不同场景下的最优解。

来源:老客数据一点号

相关推荐