Java拓展——常见数据结构(数组,栈,链表,树,图)

news2024/11/25 1:54:57

Java基础11——数据结构

文章目录

  • Java基础11——数据结构
  • 数据结构
    • 常见的数据结构
      • 数组
        • 栈简介
        • 如何创建一个类实现栈的功能?
        • **栈使用场景**
  • 队列
        • 队列简介
        • 如何实现?
        • **队列分类**
  • 链表
      • **单链表**
      • **循环链表**
      • **双向链表**
      • **双向循环链表**
      • **链表使用场景**
      • **数组** **vs** **链表**
    • **二叉树分类**
        • **满二叉树**
        • **完全二叉树**
        • **平衡二叉树**
      • **二叉树的存储**
        • **链式存储**
        • **顺序存储**
    • **二叉树的遍历**
        • **先序遍历**
        • **中序遍历**
        • **后序遍历**
    • **二叉排序树**
        • **为什么使用二叉排序树**
        • **使用链表存储**
        • **使用二叉排序树存储**
      • **什么是二叉排序树**
  • **红黑树**
        • **什么是红黑树**
        • **为什么要用红黑树**
        • **旋转和变色**
        • **红黑树的优缺点**
        • **旋转和变色**
        • **红黑树的优缺点**

数据结构

数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作

数据结构可以看作是一种数据的组织方式,不同的数据结构适用于不同的应用场景,根据操作的需求和效率要求,选择合适的数据结构可以提高算法的执行效率。

常见的数据结构

  • 数组(Array) 将相同类型的数据元素按顺序存储在连续的内存单元中,可以通过索引快速访问元素,定长。

  • 哈希表(Hash Table):通过散列函数将键映射到值,实现高效的数据查找和插入

  • 栈(Stack) 一种具有后进先出(LIFO)特性的数据结构,常用于处理函数调用、表达式求值等。

  • 队列(Queue):一种具有先进先出(FIFO)特性的数据结构,常用于任务调度、广度优先搜索等。

    • image-20230827210435529
    • 像生活中安检机
  • 链表(Linked List):通过节点与节点之间的引用(指针)链接来存储数据,分为单向链表和双向链表、循环链表,对于插入和删除操作较为高效。

  • 树(Tree):一种层次结构的数据结构,包括二叉树、平衡树、二叉搜索树等,常用于搜索和排序操作。

  • 图(Graph):由节点和边构成的数据结构,用于表示各种复杂的关系和连接。

数组

数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。

我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。数组的特点是:提供随机访问 并且容量有限。

假如数组的长度为 n。

访问:O(1)//访问特定位置的元素

插入:O(n )//最坏的情况发生在插入发生在数组的首部并需要移动所有元素时

删除:O(n)//最坏的情况发生在删除数组的开头发生并需要移动第一元素后面所有的元素时

image-20230919213440626

栈简介

  • 栈 (Stack) 只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照 后进先出(LIFO, Last In First Out)的原理运作。

  • 在栈中,push 和 pop 的操作都发生在栈顶。

  • 栈常用一维数组或链表来实现,用数组实现的栈叫作 顺序栈 ,用链表实现的栈叫作 链式栈

如何创建一个类实现栈的功能?

  • 底层存元素使用数组
  • 添加元素始终添加到数组的最后一个
  • 获取元素时永远从最后一个开始取元素
  • 扩容问题
  • 栈既可以通过数组实现,也可以通过链表来实现。

栈使用场景

  • 实现浏览器的回退和前进功能
  • 反转字符串,将字符串中的每个字符先入栈再出栈就可以了
  • 方法之间的调用
public 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

听GPT 讲Istio源代码--cni

在 Istio 项目中, cni: CNI 目录包含了 Istio CNI 插件的相关代码和配置文件。CNI(Container Network Interface)是一个用于配置容器网络的接口规范。Istio CNI 插件用于将 Istio 的网络功能集成到容器运行时环境中,以便实现对微服…

Nvidia计算卡扫盲

title: Nvidia计算卡扫盲 sidebarDepth: 4 layout: AtmLayout GPU 大的方面来讲, 由显存计算单元组成; 显存 GPU板卡上的DRAM容量大,速度慢,CPU和GPU都可以访问 计算单元 Streaming Multiprocessor,执行计算, 每个…

【FAQ】安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

开发高性能知识付费平台:关键技术策略

引言 在构建知识付费平台时,高性能是确保用户满意度和平台成功的关键因素之一。本文将探讨一些关键的技术策略,帮助开发者打造高性能的知识付费平台。 1. 前端性能优化 使用CDN加速资源加载 使用内容分发网络(CDN)来托管和加…

解决Office Word另存为PDF卡死的问题

今天突然间遇到这个问题,在网上找了好久都没有想要的答案。后来一步一步摸索终于找到了问题所在,希望这篇文章能帮助有同样问题的各位! 1.问题 当word文件点击另存为PDF格式时,下一刻光标变为加载状态,并且一直在转圈…

数据结构----链式栈

目录 前言 链式栈 操作方式 1.存储结构 2.初始化 3.创建节点 4.判断是否满栈 5.判断是否空栈 6.入栈 7.出栈 8.获取栈顶元素 9.遍历栈 10.清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈…

【初阶数据结构】——堆的引入和实现二叉树

目录 前言 一、二叉树的顺序结构及实现 1.1二叉树的顺序结构 1.2堆的结构 二、堆的实现 2.1堆向上调整算法(堆的插入) 2.2堆向下调整算法(堆的删除) 2.3建堆的时间复杂度 2.4堆的创建 2.5堆的初始化和空间的销毁 2.6堆…

【数据结构】图的基本概念,图的存储结构(邻接矩阵;邻接表;十字链表;邻接多重表)

欢~迎~光~临~^_^ 目录 1、图的基本概念 2、图的存储结构 2.1邻接矩阵 2.2邻接表 2.3十字链表 2.4邻接多重表 2.5图的四种存储结构的对比 1、图的基本概念 图是由一组节点(通常称为顶点)和一组连接这些节点的边(通常称为边&#xff0…

注册中心的学习

一、什么是注册中心? 注册中心主要有三种角色: 1.1、服务提供者(RPC Server): 在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 1.2、服务消费者(…

Qt5开发及实例V2.0-第七章-Qt图形视图框架

Qt5开发及实例V2.0-第七章-Qt图形视图框架 第7章 Qt 5图形视图框架7.1 图形视图体系结构7.1.1 Graphics View的特点7.1.2 Graphics View的三元素7.1.3 GraphicsView的坐标系统 7.2 【实例】:图形视图7.2.1 飞舞的蝴蝶7.2.2 地图浏览器7.2.3 图元创建7.2.4 图元的旋转…

大数据-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…

Python 图形化界面基础篇:创建顶部菜单

Python 图形化界面基础篇:创建顶部菜单 引言 Tkinter 库简介步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口步骤3:创建顶部菜单栏步骤4:处理菜单项的点击事件步骤5:启动 Tkinter 主事件循环 完整示例代码…

Python 如何把 String 转换为 Json 对象

在我们对 JSON 进行处理的时候,大概率我们会需要把字符串转换为 JSON 对象后才能进行处理。 Python 贴心的使用 json.loads(employee_string)就可以了。 首先需要做的就是导入 JSON 库。 #include json library import json 对现代程序员来说,JSON …

CNC 3D浮雕 Aspire 11.55 Crack

Aspire 提供了功能强大且直观的软件解决方案,用于在 CNC 铣床上创建和切割零件。有用于 2D 设计和计算 2D 刀具路径的工具,例如仿形、型腔加工和钻孔以及 2.5D 刀具路径,包括:V 形雕刻、棱镜雕刻、成型刀具路径、凹槽、 倒角刀具路…

抖音seo矩阵系统开源代码定制部署

抖音SEO底层开发逻辑主要包括以下几个方面: 1. 关键词优化:抖音SEO需要优化关键词,将关键词嵌入短视频标题、描述、标签等地方,提升抖音短视频在搜索引擎中的排名。 2. 标题优化:抖音短视频的标题应简明扼要&#xff…

C/C++满足条件的数的累加 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C满足条件的数的累加 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C满足条件的数的累加 2023年5月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 现有n个整数&#x…

【前端面试题】浏览器面试题

文章目录 前言一、浏览器面试问题1.cookie sessionStorage localStorage 区别2.如何写一个会过期的localStorage,说说想法2.如何定时删除localstorage数据2.localStorage 能跨域吗2.memory cache 如何开启2.localstorage的限制2.浏览器输入URL发生了什么2.浏览器如何…

IIC协议详解

目录 1.IIC协议概述 2.IIC总线传输 3.IIC-51单片机应用 1.起始信号 2.终止信号 3.应答信号 4.数据发送 4.IIC-32单片机应用 用到的库函数: 1.IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线)是由PHILIPS公司在80年代开发的两线式串行总线&…

进程组.会话.终端

一.进程组.会话.终端概念 1.1进程组 在Linux操作系统中,进程组(Process Group)是一组进程的集合。进程组内的每个进程都有一个相同的进程组ID(PGID)。进程组可以用于进行作业控制、信号传递和进程状态管理等操作。 …

大模型+检索增强(RAG、Atlas 和 REPLUG)

https://zhuanlan.zhihu.com/p/651380539 https://github.com/ninehills/blog/issues/97 1. 检索增强生成 RAG 在问答和对话的场景下,通常可以通过检索和生成两种方式得到一个回复。检索式回复是在外部知识库中检索出满意的回复,较为可靠和可控&#…