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

数据结构有哪些类型(对于数据结构的简述)

在学习计算机时,数据结构是不可忽视的一点,从考研时的408课程,再到工作中编写软件,网站,要想在计算机领域站住脚跟,数据结构是必备的

在这里,我对于数据结构进行了汇总,并简要描述,在后面会对各种数据结构进行详细介绍

在 Java 中,数据结构主要分为两大类:线性数据结构非线性数据结构。Java 标准库(如 java.util 包)提供了许多现成的数据结构实现,这些实现基于不同的底层存储方式和操作特性。以下是对 Java 中常见数据结构的详细描述:

1. 线性数据结构

线性数据结构是指数据元素之间存在一对一的线性关系。

(1)数组(Array)

数组是一种基本的线性数据结构,用于存储固定大小的同类型数据元素。

  • 特点

    • 元素存储在连续的内存空间中。

    • 支持随机访问,通过索引可以快速访问任意位置的元素,时间复杂度为 O(1)。

    • 插入和删除操作效率较低,通常需要移动大量元素,时间复杂度为 O(n)。

    • 数组的大小在创建后不可变。

  • 示例代码

  • int[] array = new int[10];
    array[0] = 1;
    array[1] = 2;
    System.out.println(array[0]); // 输出:1
(2)动态数组(ArrayList)

ArrayList 是 Java 中基于动态数组实现的集合类,它提供了动态扩容的功能。

  • 特点

    • 底层使用数组存储元素。

    • 支持随机访问,时间复杂度为 O(1)。

    • 插入和删除操作效率较低,时间复杂度为 O(n)。

    • 动态扩容,可以根据需要自动调整数组大小。

  • 示例代码

  • import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);System.out.println(list.get(0)); // 输出:1list.remove(0);System.out.println(list.get(0)); // 输出:2}
    }
(3)链表(LinkedList)

LinkedList 是 Java 中基于双向链表实现的集合类,它支持高效的插入和删除操作。

  • 特点

    • 底层使用双向链表存储元素。

    • 不支持随机访问,访问任意位置的元素需要从头开始遍历,时间复杂度为 O(n)。

    • 插入和删除操作效率较高,时间复杂度为 O(1)。

    • 适合频繁插入和删除操作的场景。

  • 示例代码

  • import java.util.LinkedList;public class Main {public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();list.add(1);list.add(2);System.out.println(list.get(0)); // 输出:1list.remove(0);System.out.println(list.get(0)); // 输出:2}
    }
(4)栈(Stack)

栈是一种后进先出(LIFO)的数据结构,Java 提供了 Stack 类来实现栈。

  • 特点

    • 支持快速的插入和删除操作,时间复杂度为 O(1)。

    • 只能在栈顶进行插入和删除操作。

    • 适合实现函数调用、表达式求值等场景。

  • 示例代码

  • import java.util.Stack;public class Main {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(1);stack.push(2);System.out.println(stack.pop()); // 输出:2System.out.println(stack.pop()); // 输出:1}
    }
(5)队列(Queue)

队列是一种先进先出(FIFO)的数据结构,Java 提供了 Queue 接口和多种实现类(如 LinkedListArrayDeque 等)。

  • 特点

    • 支持快速的插入和删除操作,时间复杂度为 O(1)。

    • 只能在队尾插入元素,在队头删除元素。

    • 适合实现任务调度、消息队列等场景。

  • 示例代码

  • import java.util.LinkedList;
    import java.util.Queue;public class Main {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();queue.add(1);queue.add(2);System.out.println(queue.poll()); // 输出:1System.out.println(queue.poll()); // 输出:2}
    }

2. 非线性数据结构

非线性数据结构是指数据元素之间存在多对多的关系。

(1)树(Tree)

树是一种层次化的数据结构,每个节点可以有多个子节点。

  • 常见类型

    • 二叉树(Binary Tree):每个节点最多有两个子节点。

    • 二叉搜索树(Binary Search Tree):左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值。

    • 平衡二叉树(Balanced Binary Tree):左右子树的高度差不超过 1。

    • 红黑树(Red-Black Tree):一种自平衡的二叉搜索树。

    • 堆(Heap):一种特殊的完全二叉树,分为最大堆和最小堆。

  • 示例代码(二叉树):

  • class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
    }public class Main {public static void main(String[] args) {TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);}
    }
(2)图(Graph)

图是一种由节点(顶点)和边组成的复杂数据结构,节点之间可以存在任意关系。

  • 特点

    • 节点之间通过边连接,可以是有向边或无向边。

    • 支持复杂的遍历和搜索算法,如深度优先搜索(DFS)和广度优先搜索(BFS)。

    • 适合表示复杂的关系网络,如社交网络、地图路径等。

  • 示例代码(无向图):

  • import java.util.ArrayList;
    import java.util.List;class Graph {private int vertices;private List<List<Integer>> adjacencyList;public Graph(int vertices) {this.vertices = vertices;this.adjacencyList = new ArrayList<>();for (int i = 0; i < vertices; i++) {adjacencyList.add(new ArrayList<>());}}public void addEdge(int src, int dest) {adjacencyList.get(src).add(dest);adjacencyList.get(dest).add(src); // 无向图}public void printGraph() {for (int i = 0; i < vertices; i++) {System.out.println("Adjacency list of vertex " + i);System.out.print("head");for (int j : adjacencyList.get(i)) {System.out.print(" -> " + j);}System.out.println();}}
    }public class Main {public static void main(String[] args) {Graph graph = new Graph(5);graph.addEdge(0, 1);graph.addEdge(0, 4);graph.addEdge(1, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 3);graph.addEdge(3, 4);graph.printGraph();}
    }
(3)哈希表(Hash Table)

哈希表是一种通过哈希函数将键映射到值的数据结构。

  • 特点

    • 提供快速的插入、删除和查找操作,平均时间复杂度为 O(1)。

    • 哈希函数将键映射到存储位置,可能存在冲突,需要解决冲突的方法(如链表法、开放寻址法)。

    • 适合实现字典、缓存等场景。

  • 示例代码

  • import java.util.HashMap;public class Main {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();map.put("Alice", 25);map.put("Bob", 30);System.out.println(map.get("Alice")); // 输出:25map.remove("Bob");}
    }

相关文章:

数据结构有哪些类型(对于数据结构的简述)

在学习计算机时&#xff0c;数据结构是不可忽视的一点&#xff0c;从考研时的408课程&#xff0c;再到工作中编写软件&#xff0c;网站&#xff0c;要想在计算机领域站住脚跟&#xff0c;数据结构是必备的 在这里&#xff0c;我对于数据结构进行了汇总&#xff0c;并简要描述&…...

Vscode 插件开发

文章目录 1、使用vscode官方插件生成框架&#xff0c;下载脚手架2、使用脚手架初始化项目&#xff0c;这里我选择的是js3、生成的文件结构如下&#xff0c;重要的就是以下两个文件4、代码5、打包使用6、发布官网地址7、publisher ID undefined provided in the extension manif…...

C# string和其他引用类型的区别

在C#中&#xff0c;字符串&#xff08;String&#xff09;和其他引用类型&#xff08;Reference Types&#xff09;之间有几个关键的区别&#xff0c;这些区别主要体现在它们的内存管理、赋值行为以及使用方式上。 1. 内存管理 字符串&#xff08;String&#xff09;&#xff1…...

RTT添加一个RTC时钟驱动,以DS1307为例

添加一个外部时钟芯片 这里多了一个选项 复制drv_rtc.c,重命名为drv_rtc_ds1307.c 添加到工程中 /*** @file drv_rtc_ds1307.c* @brief * @author jiache (wanghuan3037@fiberhome.com)* @version 1.0* @date 2025-01-08* * @copyright Copyright (c) 2025 58* */ #...

常见的低代码策略整理

低代码策略通过简化开发流程、降低技术门槛、提升效率&#xff0c;帮助用户快速构建灵活可靠的应用。这些策略的核心优势体现在以下方面&#xff1a; 快速交付与降本增效 减少编码需求&#xff1a;通过可视化配置&#xff08;如变量替换、表达式函数&#xff09;替代传统编码…...

从彩色打印单行标准九九表学习〖代码情书〗的书写范式(Python/DeepSeek)

写给python终端的情书&#xff0c;学习代码设计/书写秘笈。 笔记模板由python脚本于2025-04-17 12:49:08创建&#xff0c;本篇笔记适合有python编程基础的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简…...

QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)

目录 引言相关阅读项目结构文件组织 核心技术实现1. 数据模型设计联系人项目类 (datamodel.h)数据模型类 (datamodel.h)数据模型实现 (datamodel.cpp) 2. 主程序入口点 (main.cpp)3. 主界面设计 (Main.qml)4. 联系人对话框 (ContactDialog.qml)5. 自定义组件CustomTextField.qm…...

postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。

postman莫名奇妙报错&#xff0c;可能是注释引起的。postman 过滤请求体中的注释。 1、问题描述2、问题分析3、解决方法 1、问题描述 postman http请求测试时&#xff0c;如果在请求体中添加了注释&#xff0c;那么这个注释会被带到服务端执行&#xff0c;导致服务端接口返回报…...

扩增子分析|基于R语言microeco包进行微生物群落网络分析(network网络、Zi-Pi关键物种和subnet子网络图)

一、引言 microeco包是福建农林大学姚敏杰教授团队开发的扩增子测序集成分析。该包综合了扩增子测序下游分析的多种功能包括群落组成、多样性、网络分析、零模型等等。通过简单的几行代码可实现复杂的分析。因此&#xff0c;microeco包发表以来被学界广泛关注&#xff0c;截止2…...

中间件--ClickHouse-4--向量化执行(什么是向量?为什么向量化执行的更快?)

1、向量&#xff08;Vector&#xff09;的概念 &#xff08;1&#xff09;、向量的定义 向量&#xff1a;在计算机科学中&#xff0c;向量是一组同类型数据的有序集合&#xff0c;例如一个包含多个数值的数组。在数据库中&#xff0c;向量通常指批量数据&#xff08;如一列数…...

TDengine 存储引擎剖析:数据文件与索引设计(一)

TDengine 存储引擎简介 在物联网、工业互联网等快速发展的今天&#xff0c;时间序列数据呈爆发式增长。这些数据具有产生频率高、依赖采集时间、测点多信息量大等特点&#xff0c;对数据存储和处理提出了极高要求。TDengine 作为一款高性能、分布式、支持 SQL 的时序数据库&am…...

【kubernetes】pod.spec.containers.ports的介绍

目录 1. 说明2. 基本结构3. 字段说明4. 使用场景5. 示例6. 注意事项 1. 说明 1.在 Kubernetes 中&#xff0c;pod.spec.containers.ports 是 Pod 定义中用于配置容器端口映射的字段&#xff0c;其作用是声明容器需要监听的端口以及如何将这些端口暴露给 Pod 的外部访问。 2. …...

【SpringBoot+Vue自学笔记】001

跟着这位老师学习的&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 前后端开发技术的全栈课程&#xff1a; Java EE企业级框架&#xff1a;SpringBootMyBatisPlus Web前端核心框架&#xff1a;VueElement UI 公共云…...

第十节:性能优化-如何排查组件不必要的重复渲染?

工具&#xff1a;React DevTools Profiler 方法&#xff1a;memo、shouldComponentUpdate深度对比 React 组件性能优化&#xff1a;排查与解决重复渲染问题指南 一、定位性能问题&#xff1a;React DevTools 高级用法 使用 React Developer Tools Profiler 精准定位问题组件&…...

MATLAB项目实战(一)

题目&#xff1a; 某公司有6个建筑工地要开工&#xff0c;每个工地的位置&#xff08;用平面坐标系a&#xff0c;b表示&#xff0c;距离单位&#xff1a;km&#xff09;及水泥日用量d(t)由下表给出&#xff0e;目前有两个临时料场位于A(5,1)&#xff0c;B(2,7)&#xff0c;日储…...

spring boot 文件下载

1.添加文件下载工具依赖 Commons IO is a library of utilities to assist with developing IO functionality. <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version> </depe…...

HTTP 2.0 协议特性详解

1. 使用二进制协议&#xff0c;简化传输的复杂性&#xff0c;提高了效率 2. 支持一个 TCP 链接发起多请求&#xff0c;移除 pipeline HTTP/2 移除了 HTTP/1.1中的管道化&#xff08;pipeline&#xff09;机制&#xff0c;转而采用多路复用&#xff08;Multiplexing&#xff0…...

微服务链路追踪:SleuthZipkin

文章目录 Sleuth & Zipkin一、Sleuth\&Zipkin介绍二、搭建环境三、Sleuth入门操作四、Zipkin搭建及操作五、RabbitMQ方式发送信息六、Elasticsearch持久化 SpringBootAdmin一、Actuator介绍二、Actuator快速入门三、SpringBootAdmin介绍四、SpringBootAdmin快速入门4.1…...

HTML语义化与无障碍设计

HTML 语义化与无障碍设计&#xff1a;构建包容且高效的网页体验 引言 在我的前端开发学习旅程中&#xff0c;起初将 HTML 仅视为页面布局的工具&#xff0c;大量使用无语义的 <div> 和 <span>。直到在一篇技术博客当中了解到&#xff0c;作者在一次团队项目中&am…...

java面试篇 4.9(mybatis+微服务+线程安全+线程池)

目录 mybatis&#xff1a; 1、mybatis的执行流程 2、mybatis是否支持延迟加载&#xff1f; 当我们需要去开启全局的懒加载时&#xff1a; 3、mybatis的一级和二级缓存 微服务 1、springcloud五大组件有哪些 2、服务注册和发现是什么意思&#xff1f;springcloud如何实现…...

基于电子等排体的3D分子生成模型 ShEPhERD - 评测

一、背景介绍 ShEPhERD 是一个由 MIT 开发的一个 3D 相互作用感知的 ligand-based的分子生成模型&#xff0c;以 arXiv 预印本的形式发表于 2024 年&#xff0c;被ICLR2025 会议接收。文章链接&#xff1a;https://openreview.net/pdf?idKSLkFYHlYg ShEPhERD 是一种基于去噪扩…...

极狐GitLab 功能标志详解

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 功能标志 (BASIC ALL) 使用功能标志&#xff0c;您可以将应用程序的新功能小批量部署到生产环境中。您可以为部分用户打开和…...

GR00T N1:面向通用类人机器人的开放基础模型

摘要 通用型机器人需要具备多功能的身体和智能的大脑。近年来&#xff0c;类人机器人的发展在构建人类世界中的通用自主性硬件平台方面展现出巨大潜力。一个经过大量多样化数据源训练的机器人基础模型&#xff0c;对于使机器人能够推理新情况、稳健处理现实世界的多变性以及快…...

QT简单实例

QT简单实例 QT简单实例一&#xff1a;通过拖动创建1.创建工程2.拖动控件实现响应3.文件目录3.1 TestQDialog.pro3.2 main.cpp3.3 dialog.h3.4 dialog.cpp 二&#xff1a;通过动态创建1.创建工程2.文件目录2.1 TestQDialogSelf.pro2.2 main.cpp2.3 dialog.h2.4 dialog.cpp QT简单…...

Linux:初学者的简单指令

文章目录 pwd&#xff08;Print working directory&#xff09;whoamilsmkdir ~~cd ~~touch ~~rm ~~ 充当后端服务,我们用xshell工具来进行操作 其中Linux文件是/目录/目录/目录或文件/来表示的&#xff08;其中目录可以看作是windows操作系统的文件夹&#xff0c;只是Linux中…...

zynq7020 ubuntu_base 跟文件系统

整体流程 制作 ubuntu_base 镜像运行 petalinux 构建的 ramdisk 系统用 ramdisk 系统把 ubuntu_base 镜像烧录到 emmc从 emmc 跟文件系统 启动内核 制作 ubuntu_base 镜像 制作 ubuntu_base 镜像 sudo apt-get install qemu-user-static # 安装 q…...

大数据如何让供应链更丝滑?一场数据驱动的效率革命

大数据如何让供应链更丝滑&#xff1f;一场数据驱动的效率革命 在这个一切讲求“快准狠”的时代&#xff0c;供应链的管理直接决定了企业的竞争力。你能想到吗&#xff1f;一个订单的配送延迟&#xff0c;可能让客户流失&#xff1b;一个采购决策的失误&#xff0c;可能导致库…...

端侧大模型综述On-Device Language Models: A Comprehensive Review

此为机器翻译&#xff0c;仅做个人学习使用 设备端语言模型&#xff1a;全面回顾 DOI&#xff1a;10.48550/arXiv.2409.00088 1 摘要 大型语言模型 &#xff08;LLM&#xff09; 的出现彻底改变了自然语言处理应用程序&#xff0c;由于减少延迟、数据本地化和个性化用户体验…...

量子安全邮件系统 —— 量子随机数生成器集成

目录 量子安全邮件系统 —— 量子随机数生成器集成一、项目背景与简介二、量子随机数生成器的理论基础三、系统架构设计3.1 模块划分3.2 系统架构图(Mermaid示意图)四、关键算法与技术实现4.1 量子数据采集与预处理4.2 随机数生成算法4.3 安全性与随机性检验五、GUI设计与系统…...

python实现音视频下载器

一、环境准备 确保当前系统已安装了wxPython 、 yt-dlp 和FFmpeg。当前主要支持下载youtube音视频 1、安装wxPython pip install wxPython2、安装yt-dp pip install wxPython yt-dlp3、安装FFmpeg 在Windows 10上通过命令行安装FFmpeg&#xff0c;最简便的方式是使用包管理…...