当前位置: 首页 > wzjs >正文

青岛网站建设-中国互联建网站中企动力推荐

青岛网站建设-中国互联,建网站中企动力推荐,小说网站自主建设,获取网站访客qq号Python数据结构综合应用:实战案例与练习 一、数据结构回顾 本周学习的核心数据结构及其Python实现方式如下: 数据结构特点Python实现示例列表(List)有序,可修改,动态数组my_list [1, 2, 3]元组&#xf…

Python数据结构综合应用:实战案例与练习

一、数据结构回顾

本周学习的核心数据结构及其Python实现方式如下:

数据结构特点Python实现示例
列表(List)有序,可修改,动态数组my_list = [1, 2, 3]
元组(Tuple)有序,不可修改my_tuple = (1, 2, 3)
栈(Stack)LIFO(后进先出)使用列表的append()pop()
队列(Queue)FIFO(先进先出)使用collections.deque
双向链表快速插入/删除自定义节点类实现
哈希表O(1)时间复杂度查找字典dict类型
二叉搜索树左子树值 < 根 < 右子树值自定义树节点类
图(Graph)节点与边的集合字典表示邻接表

二、实战案例解析

案例1:LRU缓存实现

需求场景

设计一个最近最少使用缓存,当容量达到上限时淘汰最久未使用的数据。

实现方案
class DLinkedNode:def __init__(self, key=0, value=0):self.key = keyself.value = valueself.prev = Noneself.next = Noneclass LRUCache:def __init__(self, capacity: int):self.cache = {}self.capacity = capacityself.head, self.tail = DLinkedNode(), DLinkedNode()self.head.next = self.tailself.tail.prev = self.headdef _add_node(self, node):node.prev = self.headnode.next = self.head.nextself.head.next.prev = nodeself.head.next = nodedef _remove_node(self, node):prev = node.prevnext = node.nextprev.next = nextnext.prev = prevdef _move_to_head(self, node):self._remove_node(node)self._add_node(node)def get(self, key: int) -> int:if key not in self.cache:return -1node = self.cache[key]self._move_to_head(node)return node.valuedef put(self, key: int, value: int) -> None:if key in self.cache:node = self.cache[key]node.value = valueself._move_to_head(node)else:if len(self.cache) >= self.capacity:last = self.tail.prevself._remove_node(last)del self.cache[last.key]new_node = DLinkedNode(key, value)self.cache[key] = new_nodeself._add_node(new_node)
关键设计
  • 哈希表:快速定位节点位置
  • 双向链表:维护访问顺序,头节点存放最近访问元素

案例2:Dijkstra最短路径算法

算法步骤
  1. 初始化距离字典,起点距离为0,其他为无穷大
  2. 使用优先队列存储未处理的节点
  3. 每次取出距离最小的节点
  4. 更新相邻节点的最短距离
Python实现
import heapqdef dijkstra(graph, start):distances = {vertex: float('infinity') for vertex in graph}distances[start] = 0pq = [(0, start)]while pq:current_dist, current_vertex = heapq.heappop(pq)if current_dist > distances[current_vertex]:continuefor neighbor, weight in graph[current_vertex].items():distance = current_dist + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(pq, (distance, neighbor))return distances# 示例图结构(邻接表)
graph = {'A': {'B': 6, 'D': 1},'B': {'A': 6, 'C': 5},'C': {'B': 5, 'D': 8, 'E': 4},'D': {'A': 1, 'C': 8, 'E': 3},'E': {'C': 4, 'D': 3}
}print(dijkstra(graph, 'A'))  # 输出各节点到A的最短距离

三、综合练习题

1. 无序数组转二叉搜索树

class TreeNode:def __init__(self, val=0):self.val = valself.left = Noneself.right = Nonedef sorted_array_to_bst(nums):if not nums:return Nonemid = len(nums) // 2root = TreeNode(nums[mid])root.left = sorted_array_to_bst(nums[:mid])root.right = sorted_array_to_bst(nums[mid+1:])return root# 使用示例
unsorted = [3, 1, 4, 5, 2]
sorted_arr = sorted(unsorted)
bst_root = sorted_array_to_bst(sorted_arr)

2. 有效括号表达式验证

def is_valid_expression(s: str) -> bool:stack = []brackets = {')': '(', ']': '[', '}': '{'}for char in s:if char in brackets.values():stack.append(char)elif char in brackets:if not stack or stack[-1] != brackets[char]:return Falsestack.pop()return not stack and any(c in '+*-/' for c in s)  # 确保包含运算符print(is_valid_expression("(a+b)*c"))  # True
print(is_valid_expression("((a+b))"))  # False(缺少运算符)

3. 图中所有路径查找

def find_all_paths(graph, start, end, path=[]):path = path + [start]if start == end:return [path]if start not in graph:return []paths = []for node in graph[start]:if node not in path:newpaths = find_all_paths(graph, node, end, path)for p in newpaths:paths.append(p)return paths# 示例图结构
graph = {'A': ['B', 'C'],'B': ['D'],'C': ['D'],'D': ['E'],'E': []
}print(find_all_paths(graph, 'A', 'E'))
# 输出:[['A', 'B', 'D', 'E'], ['A', 'C', 'D', 'E']]

四、总结提升

  1. 数据结构选择原则

    • 需要快速查找 → 哈希表
    • 需要维护顺序 → 链表/队列
    • 需要层级关系 → 树结构
    • 需要复杂关联 → 图结构
  2. 算法优化方向

    • 空间换时间(如LRU缓存)
    • 使用合适的数据结构加速操作
    • 递归与迭代的合理选择
  3. 调试技巧

    • 对于树/图问题,先手动绘制结构图
    • 使用print语句输出中间状态
    • 编写单元测试验证边界条件

建议将每个案例手写实现一遍,并通过LeetCode平台(146-LRU缓存、743-网络延迟时间等)进行强化练习。


文章转载自:

http://JNjwJXBj.jwncx.cn
http://ANywNmiA.jwncx.cn
http://E8yBng44.jwncx.cn
http://Ld5cqGfu.jwncx.cn
http://iZFWcgrv.jwncx.cn
http://7A8z8zci.jwncx.cn
http://LBxcQwSu.jwncx.cn
http://yMLtYJls.jwncx.cn
http://oPVeVawL.jwncx.cn
http://doL8zggB.jwncx.cn
http://lUu9oFhY.jwncx.cn
http://N46UgldH.jwncx.cn
http://c0L2UTkX.jwncx.cn
http://knft7bG9.jwncx.cn
http://dOrymmi4.jwncx.cn
http://7dpRix0B.jwncx.cn
http://TNVQnh87.jwncx.cn
http://A3WhlLxq.jwncx.cn
http://LWZzTWta.jwncx.cn
http://OyqI2zOH.jwncx.cn
http://tVM27I3o.jwncx.cn
http://4rMxLsLW.jwncx.cn
http://V9NBO3aG.jwncx.cn
http://V4DvViCB.jwncx.cn
http://8Ei9mRtA.jwncx.cn
http://JzTjsMmx.jwncx.cn
http://1i7tvJ6D.jwncx.cn
http://R6f45kqw.jwncx.cn
http://sNRMRzC9.jwncx.cn
http://64FLPdtR.jwncx.cn
http://www.dtcms.com/wzjs/686350.html

相关文章:

  • wordpress标签的调用代码seo网站内容优化有哪些
  • 市政建设招标网站有哪些ps软件入门教程
  • 网站建设 点指成名哈尔滨建设规划局网站
  • 做网站怎么宣传中文wordpress插件
  • 网站如何做那种诱导广告网站建设维护外包
  • 崇明苏州网站建设在线app制作
  • 网站建设开发详细步骤流程电子商务平台网站建设
  • 临沂做网站的在哪里找app开发公司
  • 做电子书的网站很有名后来被关闭了兴义哪有做网站
  • 制作网站如何选择主机生活+装修 北京卫视
  • 手机微网站开发一网通办 上海
  • 网站营销活动网站开发用什么程序好
  • ui设计师工作内容怎么写免费给网站做seo
  • 邯郸哪有做网站的公司我想做一个网站怎么办
  • 移动商城网站开发wordpress 双会员系统
  • asp网站咋做dw做网站一般需要多大尺寸
  • 网站后台登陆网址是多少如何优化培训方式
  • vs2017 asp网站开发管理咨询公司排名 国内
  • 湖北响应式网站制作淅川做网站
  • 免费网站软件下载seo点击排名软件哪家好
  • 广东省住房和城乡建设局网站温州品牌推广
  • 信誉好的购物网站wordpress不显示样式
  • 设计师去哪个网站找工作微信小程序定制开发报价方案
  • 网站建设有什么好建议海外推广是什么工作
  • idea 做网站登录开发小程序商城多少钱
  • 昆凌做的广告买化妆品网站wordpress朋友圈主题
  • 企业网站主题手机网站设计图
  • 网站直播软件开发编程猫官方网站入口
  • 广告网站设计怎么样成都网站快速排名优化
  • 建设网站公司兴田德润官方地址google站长工具