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.mzph.cn/news/158060.shtml

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

相关文章

BGP的基础知识

BGP——边界网关协议 IGP——内部网关协议——OSPF、RIP、ISIS EGP——外部网关协议——EGP、BGP 边界网关协议BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4&#xff0c;目前市场上也存在BGPV4&…

使用ExLlamaV2量化并运行EXL2模型

量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中&#xff0c;GPTQ在gpu上提供了惊人的性能。与非量化模型相比&#xff0c;该方法使用的VRAM几乎减少了3倍&#xff0c;同时提供了相似的精度水平和更快的生成速度。 ExLlamaV2是一个旨在从…

SpringBoot : ch04 整合数据源

前言 Spring Boot 是当今最流行的 Java 开发框架之一&#xff0c;它以简洁、高效的特点帮助开发者快速构建稳健的应用程序。在实际项目中&#xff0c;涉及到数据库操作的需求时&#xff0c;我们需要对数据源进行整合。本文将重点介绍如何在 Spring Boot 中整合数据源&#xff…

NX二次开发UF_CAM_PREF_ask_integer_value 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREF_ask_integer_value Defined in: uf_cam_prefs.h int UF_CAM_PREF_ask_integer_value(UF_CAM_PREF_t pref, int * value ) overview 概述 This function provides the …

如何看待程序员领域内的“内卷”现象?

要搞清楚这个问题&#xff0c;我首先就来阐释一下“内卷”的概念。 内卷本身是从一个学术名词演化为网络流行词的&#xff0c;本是指文化模式因达到某种最终形态&#xff0c;既无法保持稳定也不能转化为更高级的新形态&#xff0c;而只能在这种文化模式内部无限变得复杂的现象。…

TVS瞬态抑制二极管的工作原理和特点?|深圳比创达电子EMC

TVS二极管一般是用来防止端口瞬间的电压冲击造成后级电路的损坏。防止端口瞬间的电压冲击造成后级电路的损坏。有单向与双向之分&#xff0c;单向TVS一般应用于直流供电电路&#xff0c;双向TVS应用于交流供电电路。 TVS产品的额定瞬态功率应大于电路中可能出现的最大瞬态浪涌…

层层剥开Android14升级后异常弹框的神秘面纱

本篇文章将会通过研究源码的方式给您讲述Android系统升级到Android14后出现的两个异常弹框并给出消除它们的方案。闲话少叙&#xff0c;我们开始。 问题描述 在Android 14升级后&#xff0c;出现两个弹窗的异常情况。这里是异常的截图&#xff1a; 接下来&#xff0c;我们对这…

第一个Maven项目

&#xff08;一&#xff09;准备工作 1、从官网下载压缩包&#xff1a;apache-maven-3.5.4-bin&#xff0c;然后解压到D盘没有中文的目录。 2、配置环境变量: 在左下角win打开“设置”&#xff0c;搜索“高级系统设置”&#xff0c;点击“高级”&#xff0c;点击“环境变量”&…

酷开科技OS——Coolita,让智能大屏走向国际

10月23日&#xff0c;2023中国—东盟视听传播论坛在南宁举行。作为第五届中国—东盟视听周重要活动之一&#xff0c;本次论坛以“共享新成果、共创新视听、共建新家园”为主题。来自中国和东盟的300余名专家学者、业界代表通过主旨演讲、主题发言、圆桌对话等方式进行深入探讨&…

自学成为android framework高手需要准备哪些装备-千里马车载车机系统开发学习

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;经常有很多学员买课同学都会问到需要准备哪些装备&#xff0c;我也回答了很多学员了&#xff0c;今天就搞一篇文章来统一说明一下&#xff0c;告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

振弦传感器土压力计的安装及埋设方法

振弦传感器土压力计的安装及埋设方法 土压力计是一种测量土体内侧压力的仪器&#xff0c;常用于土体工程的安全监测和评估。以下是土压力计的安装及埋设方法&#xff1a; 1. 选择合适的位置&#xff1a;土压力计的安装位置应该在土体内的高应力区域&#xff0c;以便能够准确测…

在Linux服务器中查找mysql的配置文件并修改其内容并保存,清空mysql8.0以上默认开启SSL的配置,防止odbc无法连接的问题

------每个命令输完记得按【enter】回车键------- 1、查找mysql的配置文件命令-mysql的配置文件默认名是my.cnf&#xff1a; find / -name my.cnf 2、查看显示的配置文件内容&#xff1a; cat /etc/my.cnf 3、修改配置文件的内容&#xff1a; 使用vi 或vim 命令 vi /etc…

推荐系统概述(PPT)

参考资料&#xff1a; 推荐系统系列之推荐系统概览&#xff08;上&#xff09; | 亚马逊AWS官方博客推荐系统系列之推荐系统概览&#xff08;下&#xff09; | 亚马逊AWS官方博客 目录如下&#xff1a; 推荐系统简介 推荐系统中常见概念 推荐系统中常用的评价指标 首页推荐…

请求的接口响应状态为已取消的原因

有趣的iframe问题 今天遇到一个问题&#xff0c;当点击了按钮----跳转页面时----F12键点击网络中的状态报了已取消&#xff0c;类型是 document说明是前端页面的问题&#xff0c;如果是xhr那可能是接口的问题。 原本是写了3个iframe,页面刷新的时候请求了第一个iframe,然后就…

随机微分方程的MATLAB数值求解

dt0.01; tout200; %总时间为2 xzeros(1,tout); x(1)0.5; %初始位置 mu0.2; sigma1; Wtsqrt(dt)*randn(1,tout); %产生随机序列Wt for t1:tout-1x(t1)x(t)mu*x(t)*dtsigma*x(t)*Wt(t); end t11:10:tout; %对原时间序列进行抽样 xtzeros(1,length(t1)); i1; for tt1xt(i)0.5*exp(…

招投标系统软件源码,招投标全流程在线化管理

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

HUAWEI华为MateBook X Pro 2022 12代酷睿版(MRGF-16)笔记本电脑原装出厂Windows11系统工厂模式含F10还原

链接&#xff1a;https://pan.baidu.com/s/1ZI5mR6SOgFzMljbMym7u3A?pwdl2cu 提取码&#xff1a;l2cu 华为原厂Windows11系统工厂包&#xff0c;带F10一键智能还原恢复功能。 自带指纹、面部识别、声卡、网卡、显卡、蓝牙等所有驱动、出厂主题壁纸、Office办公软件、华为…

深信服AC跨三层取mac,绑定ip/mac

拓扑图 目录 拓扑图 1.交换机配置团体名和版本号 2.配置跨三层取mac 3.配置策略 验证&#xff1a; “您的每一次阅读、点赞和分享&#xff0c;都是对我最大的鼓舞和动力。” 如果对亲爱您有所帮助&#xff0c;可以尝试支持一下博主&#xff0c;让博主更有动力 1.交换机配置…

Docker上部署mysql(超简单!!!)

拉取mysql镜像 运行如下命令 docker pull mysql:5.7 拉取成功 查看镜像 运行容器 此处部署最新版本的mysql docker run -d --name mysql -p 3307:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD111 mysql --name mysql&#xff1a;给容器起个名字&#xff08;唯一&#xff…

bclinux aarch64 openeuler 20.03 LTS SP1 部署 fastCFS

基于已配置好的4个节点部署ceph-0 ceph-1 ceph-2 ceph-3&#xff08;早期ceph测试环境&#xff0c;名称就不修改了&#xff09; 获取fcfs.sh mkdir /etc/fcfs cd /etc/fcfs wget http://fastcfs.net/fastcfs/ops/fcfs.sh 配置/etc/fcfs/fcfs.settings # 要安装的集群版本号…