在当今的信息时代,数据结构和算法是计算机科学的核心领域之一,它们不仅为编程提供了基础工具,而且对提高软件性能、效率和可维护性具有决定性的作用,本篇将深入探讨各种经典的数据结构及其对应的算法实现,并结合实际案例进行优化和改进。
基础数据结构介绍
1 链表(Linked List)
链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针,它分为单向链表、双向链表和循环链表等类型,链表的优点在于插入和删除操作的时间复杂度为O(1),但查找操作需要遍历整个链表,时间复杂度为O(n)。
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next
2 栈(Stack)
栈是一种后进先出(LIFO)的数据结构,遵循“先进后出”的原则,常见的应用包括表达式求值、括号匹配检查以及递归调用栈的实现等,栈的操作主要包括push(压入)、pop(弹出)和peek(查看顶部元素)。
class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() else: raise IndexError("Pop from an empty stack") def peek(self): if not self.is_empty(): return self.items[-1] else: raise IndexError("Peek from an empty stack") def is_empty(self): return len(self.items) == 0
3 队列(Queue)
队列是一种先进先出(FIFO)的数据结构,遵循“先进先出”的原则,队列常用于任务调度、缓冲区管理以及广度优先搜索等场景,队列的基本操作有enqueue(入队)、dequeue(出队)和front(查看队首元素)。
图片来源于网络,如有侵权联系删除
from collections import deque class Queue: def __init__(self): self.queue = deque() def enqueue(self, item): self.queue.append(item) def dequeue(self): if not self.is_empty(): return self.queue.popleft() else: raise IndexError("Dequeue from an empty queue") def front(self): if not self.is_empty(): return self.queue[0] else: raise IndexError("Front from an empty queue") def is_empty(self): return len(self.queue) == 0
高级数据结构及算法
1 二叉树(Binary Tree)
二叉树是一种树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点,二叉树有多种变体,如完全二叉树、满二叉树和平衡二叉树(AVL树),二叉树的常见操作包括前序遍历、中序遍历、后序遍历和层次遍历。
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right
2 堆(Heap)
堆是一种特殊的完全二叉树,分为最大堆和最小堆,最大堆的根节点总是最大的,而最小堆的根节点总是最小的,堆常用于优先队列的实现,其核心操作包括建堆、插入元素和删除最大/小元素。
图片来源于网络,如有侵权联系删除
import heapq def heapify(arr): heapq.heapify(arr) def insert_heap(heap, item): heapq.heappush(heap, item) def delete_max(heap): if heap: return heapq.heappop(heap) else: raise IndexError("Delete max from an empty heap") heap = [3, 1, 4, 1, 5, 9, 2, 6] heapify(heap) insert_heap(heap, 10) print(delete_max(heap)) # 输出: 10
3 图(Graph)
图是由顶点和边组成的集合,可以表示现实世界中的许多关系,如社交网络、交通路线和网络通信等,图的存储方式主要有邻接矩阵和邻接列表两种,常用的图算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra算法和Kruskal算法等。
class Graph: def __init__(self, vertices): self.V = vertices self.adj = [[] for _ in range(vertices)] def add
标签: #数据结构与算法教材
评论列表