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

嵌入式开发学习———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.dtcms.com/a/302590.html

相关文章:

  • openlayer根据不同的状态显示不同的图层颜色
  • Java项目接口权限校验的灵活实现
  • AI学习之Cursor项目实战
  • ICPC 2024 网络赛(I)
  • 【大模型LLM】梯度累积(Gradient Accumulation)原理详解
  • linux I2C设备AW2013驱动示例
  • rhel网卡配置文件、网络常用命令、网卡名称优化和模拟不同网络区域通信
  • 服务器中的防火墙设置需要打开吗
  • 服务器查日志太慢,试试grep组合拳
  • 利用frp实现内网穿透功能(服务器)Linux、(内网)Windows
  • CentOS7 安装和配置教程
  • RF随机森林分类预测+特征贡献SHAP分析,通过特征贡献分析增强模型透明度,Matlab代码实现,引入SHAP方法打破黑箱限制,提供全局及局部双重解释视角
  • 论文:M矩阵
  • 高可用集群Keepalived、Redis、NoSQL数据库Redis基础管理
  • 常用设计模式系列(十四)—模板方法模式
  • 在 CentOS 上安装 FFmpeg
  • 行业案例:杰和科技为智慧教育构建数字化硬件底座
  • UML类图--基于大话设计模式
  • 【设计模式】状态模式 (状态对象(Objects for States))
  • NBIOT模块 BC28通过MQTT协议连接到电信云
  • Google Chrome V8< 13.7.120 沙箱绕过漏洞
  • 设计模式(二十三)行为型:模板方法模式详解
  • 从 “看天吃饭” 到 “精准可控”:边缘计算网关如何引爆智慧农业种植变革?
  • 新手向:破解VMware迁移难题
  • 解放io_uring编程:liburing实战指南与经典cat示例解析
  • Unity_UI_NGUI_组合控件2
  • Rust实战:AI与机器学习自动炒饭机器学习
  • puppeteer 系列模块的系统性、详细讲解
  • Ubuntu系统完整配置教程
  • InfluxDB 与 HTTP 协议交互进阶(一)