Java,数据结构与集合源码,数据结构概述

目录

数据结构概念:

数据结构的研究对象:

研究对象一,数据间逻辑关系:

研究对象二,数据的存储结构(或物理结构):

研究对象三:运算结构

数据结构的相关介绍:

链表:

单向链表:每个节点有记录下一个节点的信息

双向链表:每个节点有记录上一个节点的信息和记录上一个节点的信息。

二叉树:每个节点分别后来的两条节点,层层递进。

栈:(Stack)又称为堆栈或堆叠,是限制在表的一端进行插入和删除运算的线性表。

队列:(queue)


数据结构概念:

数据结构是程序设计优化的方法论研究数据的逻辑结构和物理结构以及它们之间的相互关系,并对这种结构定义相应的运算,目的是加快程序的执行速度、减少内存占用的空间。

数据结构的研究对象:

研究对象一,数据间逻辑关系:

①集合结构:数据结构之间的元素只有“同属于同一个集合”的关系。

②线性结构:数据结构中的元素存在一对一的相互关系。(体现:一维数组,链表,栈,队列)

③树形结构:数据结构中的元素存在一对多的相互关系。

④图形结构:数据结构中的元素之间存在多对多的相互关系。

研究对象二,数据的存储结构(或物理结构):

①顺序结构:使用一组连续的存储单元依次存储逻辑上相邻的各个元素。

优点:只需要申请存放数据本身的内存空间即可,支持下标访问,也可以实现随机访问。

缺点:必须静态分配连续空间,内存的利用率较低。插入或删除可能要移动大量元素,效率低。

②链式结构:不使用连续的空间存放结构的元素,而是为每一个元素构造一个节点。节点中除了存放数据本身之外,还需要存放指向下一个节点的指针。

优点:不采用连续的存储空间从而内存空间利用率更高,克服顺序存储结构中预知元素个数的缺点。插入或删除元素时不需要移动大量元素。

缺点:需要额外的空间来表达数据之间的逻辑关系,不支持下标访问和随机访问。

③索引结构:除了建立存储节点信息之外,还建立附加的索引表来记录每个元素节点的地址。索引表由若干索引项组成。索引项的一般形式是:(关键字,地址)

优点:用节点的索引号来来确定节点存储地址,检索速度快。

缺点:增加了附加的索引表,会占用较多的存储空间。在增加和删除数据时要修改索引表,会花费较多的时间。

④散列结构:根据元素的关键字直接计算出该元素的存储地址,又称Hash存储。

优点:检索、增加和删除节点的操作都很快。

缺点:不支持排序,一般比线性表存储需要更多的空间,并且记录的关键字不能重复。

研究对象三:运算结构

施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能。运算的实现是针对存储结构的,指出运算的具体操作步骤。

·分配资源,建立结构,释放资源

·插入和删除

·获取和遍历

·修改和排序

数据结构的相关介绍:

链表:

单向链表:每个节点有记录下一个节点的信息

模拟单向链表的代码如下:

package 数据结构.链表.单向链表;public class Test
{public static void main(String[] args){Node n1 = new Node("aaa");Node n2 = new Node("bbb");Node n3 = new Node("ccc");n1.next = n2;//记录下一个元素n2.next = n3;//记录下一个元素//尾节点没有下一个元素,next赋值为null}
}
class Node
{Object Data;//用于记录本节点的数据Node next;//用于记录下一个元素public Node(){}public Node(Object data){Data = data;}
}

双向链表:每个节点有记录上一个节点的信息和记录上一个节点的信息。

模拟双向链表的代码如下:

package 数据结构.链表.双向链表;public class Test
{public static void main(String[] args){Node n1 = new Node("aaa");Node n2 = new Node("bbb");Node n3 = new Node("ccc");Node n4 = new Node("ddd");Node n5 = new Node("eee");n1.next = n2;//记录下一个元素//头节点没有上一个元素,prev赋值为nulln2.next = n3;//记录下一个元素n2.prev = n1;//记录上一个元素n3.next = n4;//记录下一个元素n3.prev = n2;//记录上一个元素n4.next = n5;//记录下一个元素n4.prev = n3;//记录上一个元素n5.prev = n4;//记录上一个元素//尾节点没有下一个元素,next赋值为null}
}
class Node
{Object Data;//用于记录本节点的数据Node prev;//用于记录上一个元素Node next;//用于记录下一个元素public Node(){}public Node(Object data){Data = data;}
}

二叉树:每个节点分别后来的两条节点,层层递进。

模拟二叉树的代码如下:

package 数据结构.二叉树;public class Test
{public static void main(String[] args){TreeNode t1 = new TreeNode("aaa");TreeNode t2 = new TreeNode("bbb");TreeNode t3 = new TreeNode("ccc");TreeNode t4 = new TreeNode("ddd");TreeNode t5 = new TreeNode("eee");TreeNode t6 = new TreeNode("fff");TreeNode t7 = new TreeNode("ggg");t1.left = t2;//左分支t1.right = t3;//右分支t2.parent = t1;//父节点t2.left = t4;//左分支t2.right = t5;//右分支t3.parent = t1;//父节点t3.left = t6;//左分支t3.right = t7;//右分支t4.parent = t2;//父节点t5.parent = t2;//父节点t6.parent = t3;//父节点t7.parent = t7;//父节点}
}
class TreeNode
{Object Data;//本节点信息TreeNode left;//左分支TreeNode right;//右分支TreeNode parent;//父节点public TreeNode(){}public TreeNode(Object data){Data = data;}
}

结构图如图:

 

栈:(Stack)又称为堆栈或堆叠,是限制在表的一端进行插入和删除运算的线性表。

最先进入的数据被压入栈底,最后的数据在栈顶。每次删除(退栈),删除的总是当前栈中最后进入(进栈)的元素,而最先插入的数据在栈底,最后退栈。(后进先出,先进后出)

·属于抽象数据类型。

·可以使用数组或链表来构建

栈的模拟代码如下:

package 数据结构.栈;import java.util.Arrays;public class Test
{public static void main(String[] args){Stack ss = new Stack(5);ss.push("abc");ss.push("def");ss.push("ghi");System.out.println(Arrays.toString(ss.values));ss.pop();System.out.println(Arrays.toString(ss.values));}
}
class Stack{Object[] values;//栈中的元素int size;//用来记录存储元素的个数public Stack(int length){values = new Object[length];}//入栈public void push(Object ele){if(size >= values.length){throw new RuntimeException("栈空间已满");}values[size] = ele;size++;}//出栈public Object pop(){if(size <= 0){throw new RuntimeException("栈空间已空");}Object o = values[size - 1];values[size - 1] = null;size--;return o;}
}

队列:(queue)

·属于抽象数据类型

·元素的添加获取满足“先进先出”。

队列的模拟代码如下:

package 数据结构.队列;public class Test
{}
class Queue
{Object[] values;int size;//记录村存储的数据的个数public Queue(int length){values = new Object[length];}public void add(Object ele)//添加{if(size >= values.length){throw new RuntimeException("队列已满");}values[size] = ele;size++;}public Object get()//获取{if(size <= 0){throw new RuntimeException("队列已空");}Object o = values[0];//数据前移for (int i = 0; i < size - 1; i++){values[i] = values[i + 1];}//最后一个元素置空values[size - 1] = null;return o;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven pom引入依赖不报红,但是项目Dependencies中没有引入jar包

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…

vue中data属性为什么是一个函数?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-data属性 目录 为什么data属性是一个函数而不是一个对象&#xff1f; 一、实例和组件定义dat…

Apache Airflow (十三) :Airflow分布式集群搭建及使用-原因及

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

U4_1:图论之DFS/BFS/TS/Scc

文章目录 一、图的基本概念二、广度优先搜索&#xff08;BFS&#xff09;记录伪代码时间复杂度流程应用 三、深度优先搜索&#xff08;DFS&#xff09;记录伪代码时间复杂度流程时间戳结构BFS和DFS比较 四、拓扑排序一些概念有向图作用拓扑排序 分析伪代码时间复杂度彩蛋 五、强…

复杂数据统计与R语言程序设计实验一

1.下载并安装R语言软件&#xff0c;熟悉基本操作的命令及操作界面&#xff0c;掌握软件的使用方法&#xff08;提供学号加姓名的截图&#xff09;。 2.下载并安装Rstudio&#xff0c; &#xff08;提供运行代码及运行结果的截图&#xff09;。 3.下载并安装R包DT&#xff0c;…

树莓派的的串口通信协议

首先&#xff0c;回顾一下串口的核心知识点&#xff0c;也是面试重点&#xff1a; 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式&#xff1a;1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…

Tensorrt 实现 yolov5-cls 遇到的问题

yolov5-6.2增加了分类训练、验证、预测和导出&#xff08;所有 11 种格式&#xff09;&#xff0c;还提供了 ImageNet 预训练的 YOLOv5m-cls、ResNet&#xff08;18、34、50、101) 和 EfficientNet (b0-b3) 模型. 官方Git : https://github.com/ultralytics/yolov5 分类模型与…

企业微信将应用安装到工作台

在上篇中介绍了配置小程序应用及指令、数据回调获取第三方凭证&#xff1b; 本篇将介绍如何将应用安装到企业工作台。 添加测试企业 通过【应用管理】->【测试企业配置】添加测试企业。 通过企业微信扫描二维码添加测试企业。 注意&#xff1a;需要扫描的账号为管理员权限…

4.Gin HTML 模板渲染

4.Gin HTML 模板渲染 Gin HTML 模板渲染 1. 全部模板放在一个目录里面的配置方法 创建用于渲染的模板html templates/index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> …

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

数学几百年重大错误:将两异函数误为同一函数

黄小宁 因各实数都可是数轴上点的坐标所以数集A可形象化为数轴上的点集A&#xff0c;从而使x∈R变换为实数yxδ的几何意义可是&#xff1a;一维空间“管道”g内R轴上的质点x∈R(x是点的坐标)运动到新的位置yxδ还在管道g内&#xff08;设各点只作位置改变而没别的改变即变位前…

『亚马逊云科技产品测评』活动征文|搭建Squoosh图片在线压缩工具

搭建Squoosh图片在线压缩工具 前言一、Squoosh是什么&#xff1f;二、准备一台Lightsail实例1.进入控制台2.创建实例3.开放端口4.部署Squoosh5.预览 三、搭建反向代理1. 安装宝塔2. 配置反向代理3. 预览代理效果 提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马…

2021秋招-总目录

2021秋招-目录 知识点总结 预训练语言模型: Bert家族 1.1 BERT、attention、transformer理解部分 B站讲解–强烈推荐可视化推倒结合代码理解代码部分常见面试考点以及问题: word2vec 、 fasttext 、elmo;BN 、LN、CN、WNNLP中的loss与评价总结 4.1 loss_function&#xff1…

linux rsyslog综合实战2

本次我们通过rsyslog服务将A节点服务器上的两个(E.g:多个日志也可以)日志(Path:/var/log/245-1.log、245-2.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS…

激发创新,助力研究:CogVLM,强大且开源的视觉语言模型亮相

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

SPASS-指数平滑法

基本概念及统计原理 基本概念 指数平滑法的思想来源于对移动平均预测法的改进。指数平滑法的思想是以无穷大为宽度&#xff0c;各历史值的权重随时间的推移呈指数衰减&#xff0c;这样就解决了移动平均的两个难题。 统计原理 简单模型 Holt线性趋势模型 案例 为了研究上海市…

HarmonyOS ArkTS List组件和Grid组件的使用(五)

简介 ArkUI提供了List组件和Grid组件&#xff0c;开发者使用List和Grid组件能够很轻松的完成一些列表页面。常见的列表有线性列表&#xff08;List列表&#xff09;和网格布局&#xff08;Grid列表&#xff09;&#xff1a; List组件的使用 List是很常用的滚动类容器组件&…

Ghidra逆向工具配置 MacOS 的启动台显示(Python)

写在前面 通过 ghidra 工具, 但是只能用命令行启动, 不太舒服, 写个脚本生成 MacOS 的 app 格式并导入启动台. 不算复杂, 主要是解析包的一些元信息还有裁剪软件图标(通过 MacOS 自带的 API) 脚本 #!/opt/homebrew/bin/python3import os import re import subprocess as sp…

易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统

易航自主开发了一款极其优雅的易航网址引导页管理系统&#xff0c;后台采用全新的光年 v5 模板开发。该系统完全开源&#xff0c;摒弃了后门风险&#xff0c;可以管理无数个引导页主题。数据管理采用易航原创的JsonDb数据包&#xff0c;无需复杂的安装解压过程即可使用。目前系…

Cache学习(1):常见的程序运行模型多级Cache存储结构

0 背景&#xff1a;常见的程序运行模型&#xff08;为什么要Cache&#xff09; 主存&#xff1a;Main Memory&#xff0c;硬件实现为RAM&#xff0c;产品形态&#xff1a;DDR&#xff08;例如&#xff1a; DDR3、DDR4等&#xff09;磁盘设备&#xff1a;Flash Memory&#xff…