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

数据结构第一弹-数据结构在不同领域的应用

大家好,今天和大家一起总结一下数据结构在不同领域和场景的应用~

不同的数据结构适用于解决不同类型的问题,从简单的数组到复杂的图结构,每种数据结构都有其独特的应用场景。

1. 数组与链表

1.1 概念

  • 数组:一种线性数据结构,其中元素按照顺序排列,每个元素可以通过索引快速访问。
  • 链表:另一种线性数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用(指针)。

1.2 应用领域

  • 数据库系统:使用数组来存储固定大小的记录集,利用链表来管理动态增长的数据集合。
  • 操作系统:进程调度中的队列通常采用链表形式,以支持高效的插入和删除操作。

1.3 代码

链表实现

class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}
}public class LinkedList {private ListNode head;public void add(int data) {if (head == null) {head = new ListNode(data);} else {ListNode current = head;while (current.next != null) {current = current.next;}current.next = new ListNode(data);}}public void printList() {ListNode temp = head;while (temp != null) {System.out.print(temp.val + " ");temp = temp.next;}System.out.println();}
}

2. 栈与队列

2.1 概念

  • :遵循后进先出(LIFO)原则的数据结构。
  • 队列:遵循先进先出(FIFO)原则的数据结构。

2.2 应用领域

  • 编译器设计:表达式求值、函数调用等常用栈来实现。
  • 操作系统:任务调度、消息传递等场景中广泛使用队列。

2.3 代码

栈实现

import java.util.Stack;public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(10);stack.push(20);stack.push(30);System.out.println("Stack: " + stack);System.out.println("Popped: " + stack.pop());System.out.println("After popping: " + stack);}
}

队列实现

import java.util.LinkedList;
import java.util.Queue;public class QueueExample {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();queue.add(10);queue.add(20);queue.add(30);System.out.println("Queue: " + queue);System.out.println("Removed: " + queue.remove());System.out.println("After removing: " + queue);}
}

3. 堆

3.1 概念

堆是一种特殊的完全二叉树,分为最大堆和最小堆两种类型。最大堆要求父节点的值大于或等于其子节点的值;最小堆则相反。

3.2 应用领域

  • 优先级队列:用于任务调度、事件处理等需要按优先级排序的应用。
  • 堆排序:基于堆的高效排序算法。

3.3 代码

最小堆实现

import java.util.PriorityQueue;public class MinHeapExample {public static void main(String[] args) {PriorityQueue<Integer> minHeap = new PriorityQueue<>();// 添加元素minHeap.add(10);minHeap.add(20);minHeap.add(15);minHeap.add(5);// 打印堆System.out.println("Min Heap: " + minHeap);// 删除最小元素System.out.println("Removed: " + minHeap.poll());System.out.println("After removing: " + minHeap);}
}

4. 图

4.1 概念

图是由顶点(节点)和边组成的非线性数据结构。边可以是有向的也可以是无向的,还可以有权重。

4.2 应用领域

  • 社交网络分析:用户之间的关系可以用图来表示。
  • 路由算法:如Dijkstra算法和A*算法,用于寻找最短路径。
  • 推荐系统:基于用户行为构建图模型,进行个性化推荐。

4.3 代码

无向图的邻接矩阵表示

public class Graph {private final int V; // 顶点数量private int[][] adjMatrix; // 邻接矩阵public Graph(int v) {V = v;adjMatrix = new int[V][V];}public void addEdge(int v, int w) {adjMatrix[v][w] = 1;adjMatrix[w][v] = 1; // 无向图}public void printGraph() {for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {System.out.print(adjMatrix[i][j] + " ");}System.out.println();}}
}

Dijkstra算法

import java.util.Arrays;import java.util.PriorityQueue;public class DijkstraAlgorithm {private static final int INF = Integer.MAX_VALUE;public static int[] dijkstra(int[][] graph, int src) {int V = graph.length;int[] dist = new int[V];Arrays.fill(dist, INF);dist[src] = 0;PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[1] - b[1]);pq.offer(new int[]{src, 0});while (!pq.isEmpty()) {int[] u = pq.poll();int uNode = u[0], uDist = u[1];if (uDist > dist[uNode]) continue;for (int v = 0; v < V; v++) {if (graph[uNode][v] != 0) { // 有边int newDist = uDist + graph[uNode][v];if (newDist < dist[v]) {dist[v] = newDist;pq.offer(new int[]{v, newDist});}}}}return dist;}public static void main(String[] args) {int[][] graph = {{0, 4, 0, 0, 0, 0, 0, 8, 0},{4, 0, 8, 0, 0, 0, 0, 11, 0},{0, 8, 0, 7, 0, 4, 0, 0, 2},{0, 0, 7, 0, 9, 14, 0, 0, 0},{0, 0, 0, 9, 0, 10, 0, 0, 0},{0, 0, 4, 14, 10, 0, 2, 0, 0},{0, 0, 0, 0, 0, 2, 0, 1, 6},{8, 11, 0, 0, 0, 0, 1, 0, 7},{0, 0, 2, 0, 0, 0, 6, 7, 0}};int[] distances = dijkstra(graph, 0);System.out.println("Shortest distances from source 0: " + Arrays.toString(distances));}
}

5. Trie树

5.1 概念

Trie树,也称为前缀树或字典树,是一种用于存储字符串集合的数据结构。它特别适用于快速查找和插入操作,尤其是在处理大量字符串时表现优异。

5.2 应用领域

  • 搜索引擎:利用Trie树进行关键词索引,加速搜索过程。
  • 词频统计:在文本处理中快速统计单词出现频率。
  • 自动补全:输入法中的候选词推荐功能。

5.3 代码

Trie树实现

class TrieNode {private final int ALPHABET_SIZE = 26;TrieNode[] children = new TrieNode[ALPHABET_SIZE];boolean isEndOfWord;public TrieNode() {isEndOfWord = false;for (int i = 0; i < ALPHABET_SIZE; i++) {children[i] = null;}}
}public class Trie {private TrieNode root;public Trie() {root = new TrieNode();}// 插入单词public void insert(String key) {TrieNode pCrawl = root;for (int level = 0; level < key.length(); level++) {int index = key.charAt(level) - 'a';if (pCrawl.children[index] == null)pCrawl.children[index] = new TrieNode();pCrawl = pCrawl.children[index];}pCrawl.isEndOfWord = true;}// 搜索单词public boolean search(String key) {TrieNode pCrawl = root;for (int level = 0; level < key.length(); level++) {int index = key.charAt(level) - 'a';if (pCrawl.children[index] == null)return false;pCrawl = pCrawl.children[index];}return (pCrawl != null && pCrawl.isEndOfWord);}// 删除单词public void delete(TrieNode root, String key, int depth) {if (root == null)return;if (depth == key.length()) {if (root.isEndOfWord)root.isEndOfWord = false;if (isEmpty(root))root = null;return;}int index = key.charAt(depth) - 'a';delete(root.children[index], key, depth + 1);if (isEmpty(root) && !root.isEndOfWord) {root = null;}}private boolean isEmpty(TrieNode node) {for (int i = 0; i < 26; i++) {if (node.children[i] != null)return false;}return true;}
}

6. 并查集

6.1 概念

并查集是一种用来管理不相交集合的数据结构,支持合并两个集合以及查询两个元素是否属于同一个集合的操作。

6.2 应用领域

  • 社交网络:确定用户之间的关系网。
  • 图像分割:基于像素相似性对图像进行区域划分。
  • 最小生成树算法:如Kruskal算法,在构建过程中使用并查集避免形成环。

6.3 代码

并查集实现

public class UnionFind {private int[] parent;private int[] rank;public UnionFind(int size) {parent = new int[size];rank = new int[size];for (int i = 0; i < size; i++) {parent[i] = i;rank[i] = 0;}}// 查找public int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);  // 路径压缩}return parent[x];}// 合并public void union(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX != rootY) {if (rank[rootX] > rank[rootY]) {parent[rootY] = rootX;} else if (rank[rootX] < rank[rootY]) {parent[rootX] = rootY;} else {parent[rootY] = rootX;rank[rootX]++;}}}// 判断是否属于同一集合public boolean isConnected(int x, int y) {return find(x) == find(y);}
}

数组与链表为基本的数据存储提供了基础支持,而栈与队列为特定的操作模式提供了高效的解决方案。堆则在优先级队列和排序算法中发挥着重要作用,图结构则广泛应用于复杂的关系建模。Trie树和并查集作为高级数据结构,在处理特定问题时提供了更优的性能。

相关文章:

数据结构第一弹-数据结构在不同领域的应用

大家好&#xff0c;今天和大家一起总结一下数据结构在不同领域和场景的应用~ 不同的数据结构适用于解决不同类型的问题&#xff0c;从简单的数组到复杂的图结构&#xff0c;每种数据结构都有其独特的应用场景。 1. 数组与链表 1.1 概念 数组&#xff1a;一种线性数据结构&a…...

如何创建基于udp的客户端和服务端

1.先创建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…...

ThinkPHP框架审计--基础

基础入门 搭建好thinkphp 查看版本方法&#xff0c;全局搜version 根据开发手册可以大致了解该框架的路由 例如访问url http://127.0.0.1:8094/index.php/index/index/index 对应代码位置 例如在代码下面添加新方法 那么访问这个方法的url就是 http://127.0.0.1:8094/index.…...

Java8 CompletableFuture异步编程

文章目录 CompletableFuturede介绍CompletableFuturede使用场景常用异步编程实现方案- Thread- ExecutorService- CountDownLatch- CyclicBarrier- ForkJoinPool- CompletableFuture各种实现方案总结 CompletableFuturede结构结构梳理- Future接口- CompletionStage接口常用方法…...

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…...

分阶段构建在复杂系统中的应用:以推荐系统为例

引言 在信息技术飞速发展的今天&#xff0c;复杂系统的构建已经成为许多企业和组织面临的重要挑战。复杂系统通常由多个相互依赖、相互作用的组件构成&#xff0c;这些组件在功能上相互关联&#xff0c;形成了一个高度耦合的整体。对于这样的系统&#xff0c;采用分阶段构建的…...

2024年12月9日历史上的今天大事件早读

1447年12月9日 中国明朝皇帝明宪宗出生 1824年12月9日 西属美洲独立战争的阿亚库乔之战爆发 1882年12月9日 中国清代数学家李善兰逝世 1917年12月9日 葡萄牙共和政府垮台 1935年12月9日 红军表示与东北抗联军一致抗日 1935年12月9日 “一二九”运动爆发 1941年12月9日 中…...

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…...

怎么为开源项目做贡献提PR?

GitHub 慢的话&#xff0c;https://ask.csdn.net/questions/8166374 复刻项目 以 https://github.com/open-frame/uniapp-init 项目为例 复刻完就会在你的仓库里有个同样的项目 拉取复刻下来的项目 然后常规的改动项目、git推送。比如我改了一个忽略文件&#xff1a; 提交…...

如何在 JavaScript 中设置定时器?

在 JavaScript 中&#xff0c;设置定时器通常使用两个内置的函数&#xff1a;setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面&#xff0c;我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…...

[GYCTF2020]Easyphp

[GYCTF2020]Easyphp 知识点 反序列化 、字符逃逸 解题 审代码 <?php error_reporting(0); session_start(); function safe($parm){$array array(union,regexp,load,into,flag,file,insert,"",\\,"*","alter");return str_replace($arr…...

JavaScript 数组的高级用法与最佳实践

在前端开发中&#xff0c;JavaScript 数组是不可或缺的工具。它们不仅用于存储数据&#xff0c;还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法&#xff0c…...

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …...

Scala的隐式对象和隐式类

1.隐式对象 object Test1 {case class DatabaseConfig(drive:String,url:String)//隐式对象//格式:就是在对象前面加一个 implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig("sqlserver.jdbc","localhost:3306")//定义一…...

【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步

2016-ACCV-Out of time: automated lip sync in the wild 摘要1. 引言1.1 相关作品 2. 表示和架构2.1 音频流2.2 视觉流2.3 损失函数2.4 训练 3. 数据集3.1 编制训练数据 4. 实验4.1 确定口型同步误差4.2 应用&#xff1a;主动说话人检测4.3 应用&#xff1a;唇读 5. 结论参考文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed

文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config&#xff08;可选&#xff09; 一、问题描述 好不容易系统开发好了&#xff0c;兴高采烈地上线&#xff0c;部署好了网站&#xff0c;访问正常&#xff0c;打开方式正确&#xff01; 但当我修改某些数据时&…...

入门级捡垃圾工作站记录

入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子&#xff0c;一个笔记本很难事事包办&#xff0c;本来打算配一个台式机&#xff0c;后来研究了一下&#xff0c;索性捡垃圾拼装的工作站&#xff0c;性价比更高&#xff0c;稳定性也更强&#xff0c;而且还可…...

2024.12.9——攻防世界ics-06

知识点&#xff1a;index文件 ics 文件&#xff08;iCalendar 格式文件&#xff09; bp抓包 密码爆破 题目&#xff1a;云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...

CUA Computer SDK:虚拟机自动化的终极解决方案,让AI代理掌控桌面级交互

CUA Computer SDK&#xff1a;虚拟机自动化的终极解决方案&#xff0c;让AI代理掌控桌面级交互 【免费下载链接】cua Create and run high-performance macOS and Linux VMs on Apple Silicon, with built-in support for AI agents. 项目地址: https://gitcode.com/GitHub_T…...

从TKMath到STL导出:一份OCCTProxy for .NET的模块化封装实战笔记

从TKMath到STL导出&#xff1a;OCCTProxy for .NET的模块化封装实战 在工业软件开发的深水区&#xff0c;几何内核的封装从来都不是简单的语法转换。当我们需要将OpenCASCADE这样的庞然大物引入.NET生态时&#xff0c;C/CLI就像一座精心设计的悬索桥&#xff0c;既要承受原生代…...

突破GEE内置限制:将本地Python机器学习模型部署至云端

1. 为什么需要将本地模型部署到GEE平台 Google Earth Engine&#xff08;GEE&#xff09;作为全球领先的地理空间分析平台&#xff0c;虽然内置了丰富的遥感数据处理算法&#xff0c;但在机器学习模型方面仍然存在明显短板。我去年在做内蒙古草原退化监测项目时就深有体会——G…...

看完就会:2026年最强AI论文写作软件榜单,AI工具一键写高质论文

2026 年实测 10 款主流 AI 论文工具&#xff0c;千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜&#xff1b;ThouPen 稳坐留学生毕业全流程工具头把交椅&#xff1b;免费工具中DeepSeek Scholar、豆包学术版表现亮眼&#xff0c;30 分钟即可生成万字高质量初稿&#xff0…...

别再只调API了!手把手教你用Python和OpenCV自定义Laplacian算子,玩转图像边缘检测

从零构建Laplacian算子&#xff1a;用Python和OpenCV揭开边缘检测的数学面纱 在计算机视觉领域&#xff0c;边缘检测是图像分析的基础操作之一。大多数开发者习惯直接调用OpenCV的cv2.Laplacian函数&#xff0c;却很少思考背后的数学原理。本文将带你从卷积核的底层设计出发&a…...

探索ArtPlayer:如何通过轻量高效的HTML5视频引擎实现全场景适配播放体验

探索ArtPlayer&#xff1a;如何通过轻量高效的HTML5视频引擎实现全场景适配播放体验 【免费下载链接】ArtPlayer :art: ArtPlayer.js is a modern and full featured HTML5 video player 项目地址: https://gitcode.com/gh_mirrors/ar/ArtPlayer 在数字内容爆发的时代&a…...

PyTorch训练二分类模型时,你的损失函数为什么突然变成NaN了?排查BCELoss的5个坑

PyTorch训练二分类模型时&#xff0c;你的损失函数为什么突然变成NaN了&#xff1f;排查BCELoss的5个坑 深夜的调试台前&#xff0c;咖啡杯早已见底&#xff0c;屏幕上那个刺眼的"nan"却依然顽固地停留在损失值的位置。这不是第一次&#xff0c;也不会是最后一次——…...

Remotely远程控制会话录制:完整监控与分析指南

Remotely远程控制会话录制&#xff1a;完整监控与分析指南 【免费下载链接】Remotely A remote control and remote scripting solution, built with .NET 7, Blazor, and SignalR. 项目地址: https://gitcode.com/gh_mirrors/re/Remotely Remotely是一款基于.NET、Blaz…...

Ai人工智能知识补充

文章目录 1.5 数据与算法基础:智能系统的“燃料”与“引擎” 1.5.1 数据工程:从原始数据到模型“燃料”的全链路 1.5.2 算法模型构建:从问题定义到模型部署的“炼金术” 1.5.3 数据隐私与安全:在价值挖掘与权利保护间走钢丝 1.6 面临的主要挑战:通往真正智能之路的险阻 1.…...

终极游戏画质优化指南:3步让所有显卡享受DLSS级性能提升

终极游戏画质优化指南&#xff1a;3步让所有显卡享受DLSS级性能提升 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 还在为显卡性能…...