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

嵌入式开发学习———Linux环境下数据结构学习(四)

队列(Queue)

队列是一种先进先出(FIFO)的数据结构,元素从一端(队尾)添加,从另一端(队首)移除。
常见操作包括入队(enqueue)和出队(dequeue)。

from collections import deque
queue = deque()
queue.append(1)  # 入队
queue.append(2)
queue.popleft()  # 出队,返回1

栈(Stack)

栈是一种后进先出(LIFO)的数据结构,元素只能从同一端(栈顶)插入和删除。
常见操作包括压栈(push)和弹栈(pop)。

stack = []
stack.append(1)  # 压栈
stack.append(2)
stack.pop()      # 弹栈,返回2

哈希表

哈希表通过键值对存储数据,利用哈希函数将键映射到固定大小的数组索引。理想情况下,插入、删除和查找操作的时间复杂度为O(1),但哈希冲突可能影响性能。

解决冲突的方法

  • 链地址法:每个数组元素指向链表,冲突元素追加到链表末尾。
  • 开放寻址法:冲突时探测下一个空闲位置(如线性探测、二次探测)。

示例代码(链地址法)

class HashTable:def __init__(self, size):self.size = sizeself.table = [[] for _ in range(size)]def _hash(self, key):return hash(key) % self.sizedef insert(self, key, value):idx = self._hash(key)for item in self.table[idx]:if item[0] == key:item[1] = value  # Update existing keyreturnself.table[idx].append([key, value])  # Add new key-value pairdef get(self, key):idx = self._hash(key)for item in self.table[idx]:if item[0] == key:return item[1]return None

树是分层数据结构,由节点(根、内部、叶)和边组成,常见类型包括二叉树、二叉搜索树(BST)、AVL树等。

核心特性

  • 二叉树:每个节点最多两个子节点(左、右)。
  • BST:左子树所有节点值小于根,右子树所有节点值大于根。
  • 平衡树(如AVL):通过旋转保持高度平衡,确保操作时间复杂度为O(log n)。

示例代码(BST插入)

class TreeNode:def __init__(self, val):self.val = valself.left = Noneself.right = Noneclass BST:def insert(self, root, val):if not root:return TreeNode(val)if val < root.val:root.left = self.insert(root.left, val)else:root.right = self.insert(root.right, val)return root

应用场景

  • 哈希表:快速查找(如字典、缓存)。
  • 树:有序数据存储(如数据库索引、文件系统)。

 

作业: 

1.牛客网刷题

http://www.xdnf.cn/news/16467.html

相关文章:

  • Cacti RCE漏洞复现
  • 【AlphaFold3】网络架构篇(2)|Input Embedding 对输入进行特征嵌入
  • halcon-blob
  • docker 入门,运行上传自己的首个镜像
  • 学习人工智能所需知识体系及路径详解
  • CTF-Web学习笔记:文件包含篇
  • java中一些数据结构的转换
  • ts学习3
  • CES Asia 2025:以创新为笔,书写亚洲科技新纪元
  • python-内存管理
  • 安宝特方案丨智能革新安全管控:AR技术赋能物流仓储行业安全升级
  • 【STM32编码器接口测速】实现测速功能
  • strcmp 与 strcpy 的深入解析
  • Day 24:元组与os模块
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • 基于springboot的在线购票系统/在线售票系统
  • C++ 中实现 `Task::WhenAll` 和 `Task::WhenAny` 的两种方案
  • Gradle#Plugin
  • Triton编译
  • JavaScript - 实现套索工具的demo
  • MySQL 8.0.42创建MGR集群
  • 深度学习(鱼书)day04--手写数字识别项目实战
  • OpenCL study - code03 rgb2gray
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • 6.Pinia快速入门
  • Mitk教程案例项目编译
  • ROS2总结(二)
  • Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider
  • ES6模块详解:核心语法与最佳实践
  • c++加载qml文件