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

JAVA与数据结构-线性表

目录

一.线性表的概念

二.线性表的关系及分类

三.数组与顺序表

四.链表

1.静态链表(链表的的数组底层实现)

2.循环链表

3.双向链表

五.栈

1.栈的概念

2.栈的底层实现

3.共享空间栈

4.逆波兰表达式(后缀表达式)

5.栈与递归 

六.队列

1.队列概念

2.队列的底层实现

3.循环队列

七.链式储存与顺序储存


一.线性表的概念

线性表是0个或n个相同数据类型的有限序列

构成线性表的条件:除了头尾外每个结点有且仅有一个前驱和后继。

二.线性表的关系及分类

线性表按物理存储结构可分为顺序存储结构和链式存储结构。

基本顺序存储结构为数组,基本链式存储结构为链表。

以数组为底层可实现顺序表和栈及队列。

以链表为底层可实现栈和队列。

其关系图大致如下:

三.数组与顺序表

封装顺序表的使用:

定义

List<类型参数>  顺序表名 = new ArrayList<>();

ArrayList<类型参数> 顺序表名 = new ArrayList<>();

【ArrayList实现了List接口】

顺序表的底层实现:

底层是对数组的处理较简单

顺序表底层需要实现的一般方法:

(其余可自行到库中查看)

四.链表

链表的一般底层实现:

通过内部类定义结点与C语言中结构体类似

要实现的一般方法有: 

1.静态链表(链表的的数组底层实现)

静态链表的实现的每一个结点需要值域和游标(游标用来存储下一节点的下标) 

2.循环链表

链表的尾部指针域指向头结点

3.双向链表

 在单向链表的属性中多了一个指向前一个结点的“指针”.

五.栈

1.栈的概念

只在表首进行删除和插入操作的线性表

2.栈的底层实现

数组实现:

需要一top变量指示栈顶下标(栈空为-1,栈满为n)

大致框架如下,方法(push,pop,peek,empty等可参考库函数尝试实现)

链表实现:

以“头指针”指示栈顶,对头指针及其前一个结点进行操作即可实现栈的基本方法

基本结构如下:

3.共享空间栈

用于底层为数组实现的栈节省空间,两栈合并。

结构大致如下:

可定义top1,top2分别表示两栈顶当两栈顶相遇(top1+1=top2)时栈满。

当top1 = -1且top2 = n时栈空(n为栈大小)。

4.逆波兰表达式(后缀表达式)

中缀转后缀:

一种较容易推导方法为加括号,通过栈推导可自行查资料

5.栈与递归 

递归的底层可以理解为一个栈,每次递归时所得数据存储在栈中直到递归出口再将数据依次弹出

六.队列

1.队列概念

只在头部进行删除尾部进行插入的线性表 (先进先出)

2.队列的底层实现

数组实现:

与栈相似多出一个属性指示队尾,对队首队尾进行操作

链表实现:

单向链表实现时与栈相似都是对头指针进行操作,只是加入删除元素的方式有所不同

双向链表实现队列较为快捷可同时对头尾指针进行操作。 

3.循环队列

以数组为底层实现循环队列时防止假满状态(队尾元素删除后其空间无法利用,头指针一直向前走无法回头)实现空间重复利用。定义front rear指示队列首尾部

循环队列大小计算公式:

ret = (front - rear + maxSize) % maxSize 

循环队列循环的实现:

添加删除元素时分别对尾头指针进行操作;

添加移动尾的下标:

(rear + 1) % maxSize

删除移动头的下标:

(front + 1) % maxSize

循环队列满空的判断:

空时front = rear

满时判断:

1.标记法

flag=false 时为空

flag=true时为满

2.留空法

留下一个位置不放元素

当(rear + 1) % maxSize = front 时为满

通过以上操作我们可以发现下标只在(0 ~ maxSize - 1)范围内变化,从而实现循环

4.双向队列

可在两边同时进出的队列

七.链式储存与顺序储存

顺序存储结构如数组及以其为底层实现的结构:

1.空间大小确定

2.如需查找,时间复杂度仅为O(1)较易进行

3.插入操作需移动插入位置后所有元素,时间复杂度为O(n),不便

链式存储结构如链表及以其为底层实现的结构:

1.大小不固定

2.只可按一定顺序进行查找O(n)不便

3.插入时找指定元素时O(n)插入时O(1),插入愈多其优势越明显

故选用结构时需据实际情况。

相关文章:

JAVA与数据结构-线性表

目录 一.线性表的概念 二.线性表的关系及分类 三.数组与顺序表 四.链表 1.静态链表(链表的的数组底层实现&#xff09; 2.循环链表 3.双向链表 五.栈 1.栈的概念 2.栈的底层实现 3.共享空间栈 4.逆波兰表达式&#xff08;后缀表达式&#xff09; 5.栈与递归 六.…...

C++|开源日志库log4cpp和glog

文章目录 log4cpp 和 glog对比1. **功能对比**2. **易用性和配置**3. **性能**4. **线程安全**5. **日志输出**6. **功能扩展**7. **适用场景**8. **总结** 其它开源C日志库1. **spdlog**2. **easylogging**3. **Boost.Log**4. **loguru**5. **Poco Logging**6. **Qt Logging (…...

React Context 实现全局组件注册

来源于GPT4o&#xff1a;https://ai.openaicloud.cn/?inVitecodeEJSTWFZMQE 第一步&#xff1a;创建全局组件上下文 (GlobalComponentProvider) 我们将创建一个 React Context 和 Provider&#xff0c;用于存储和提供全局组件。 // src/context/GlobalComponentProvider.tsx…...

基于AutoDL云计算平台+LLaMA-Factory训练平台微调本地大模型

1. 注册与认证 访问AutoDL官网&#xff1a;前往 AutoDL官网。 注册账号&#xff1a;完成注册流程。 实名认证&#xff1a;按照要求完成实名认证&#xff0c;以确保账号的合规性。 2. 选择GPU资源 进入算力市场&#xff1a;在官网首页点击“算力市场”菜单。 挑选GPU&#x…...

strdup 函数

strdup 函数是 C 标准库中的一个函数&#xff0c;用于复制一个字符串。它的全称是 "string duplicate"。这个函数在 <string.h> 头文件中声明。strdup 函数会分配足够的内存来存储源字符串的副本&#xff0c;并将源字符串的内容复制到新分配的内存中。然后返回…...

2.9/Q2,Charls最新文章解读!

文章题目&#xff1a;The causal effect of Internet use on rural middle-aged and older adults depression: A propensity score matching analysis DOI&#xff1a;10.1177/20552076241310041 中文标题&#xff1a;互联网使用对农村中老年人抑郁症的因果影响&#xff1a…...

【未完成】springboot项目实现扫码登录相关逻辑

准备工作 配置redis 引入redis依赖 <dependencies><!-- Spring Data Redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><…...

html、js、css实现爱心效果

好的&#xff01;我们可以进一步美化这个爱心效果&#xff0c;增加更多动态和视觉吸引力。以下是改进后的代码&#xff0c;包括以下功能&#xff1a; 1. 背景渐变&#xff1a;添加动态背景渐变效果。 2. 爱心阴影&#xff1a;为爱心添加阴影&#xff0c;使其更具立体感。 3. 随…...

【前端】Hexo 建站指南

文章目录 前言生成站点本地测试部署云端参考 前言 更好的阅读体验&#xff1a;https://blog.dwj601.cn/FrontEnd/Hexo/build-your-own-website-with-hexo/ 笔记记多了&#xff0c;想要分享给同学们一起交流进步&#xff0c;该怎么办&#xff1f;想要搭建一个属于自己的知识库…...

OpenStack基础架构

openstack是一套IaaS云的解决方案&#xff0c;是一个开源的云计算管理平台 每一台物理机上都会有一个nova服务器 虚拟化其实是在nova主机里启用的 COW技术&#xff1a; 这么来看&#xff0c;3个物理机上产生10个虚拟机&#xff0c;所以把服务分散到10个虚拟机上和分散到4个虚拟…...

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…...

IPhone16 Plus 设备详情

目录 产品宣传图内部图——前内部图——后设备详细信息 产品宣传图 内部图——前 内部图——后 设备详细信息 信息收集于HubWeb.cn...

埃氏算法C++实现: 快速输出质数( 素数 )

目录 1.简介 算法原理 算法特点 应用场景 2.一般求素数方法 3.埃氏算法求素数 3.1.无动态分配 3.2.有动态分配 1.简介 ‌埃氏算法&#xff08;Eratosthenes Sieve&#xff09;‌&#xff0c;全称为埃拉托斯特尼筛法&#xff0c;是一种由古希腊数学家埃拉托斯特尼在公元…...

后端的config包中的常用配置

文章目录 一. CorsConfig二. Knife4jConfig三. MyBatisPlusConfig四. RedisTemplateConfig五. RedissonConfig 一. CorsConfig 全局跨域配置 Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registr…...

基于亿坊PHP框架构建物联网解决方案的优势分析!

在物联网 (IoT) 领域&#xff0c;选到合适的框架对于整个项目的开展也尤为重要。通常情况下&#xff0c;基于PHP的一些主流框架被用户常选择&#xff0c;今天就带大家了解下基于亿坊PHP框架构建物联网解决方案的优势有哪些&#xff1f; 1、开发效率高 在物联网项目中&#xf…...

IoTDB结合Mybatis使用示例(增删查改自定义sql等)

IoTDB时序库是当前越来越流行以及基于其优势各大厂商越来越易接受的国产开源时序数据库&#xff0c;针对IoTDB的内容不做过多介绍&#xff0c;在使用该时序库时&#xff0c;往往有一定入门门槛&#xff0c;不同于关系型数据库或文档型数据库那般方便维护和接入开发&#xff0c;…...

skynet 源码阅读 -- 启动主流程

Skynet 启动主流程分析 Skynet 是一个轻量级、高并发的服务器框架。它在启动时会进行一系列初始化操作&#xff0c;并启动多个不同功能的线程&#xff08;Monitor、Timer、Worker、Socket&#xff09;&#xff0c;从而实现消息分发、定时器、网络I/O等核心功能。本文主要从 ma…...

OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯

目录 简述 什么是高通滤波&#xff1f; 高通滤波的概念 应用场景 索贝尔算子 算子公式 实现代码 特点 沙尔算子 算子公式 实现代码 特点 拉普拉斯算子 算子公式 实现代码 特点 高通滤波器的对比与应用场景 相关阅读 OpenCV&#xff1a;图像滤波、卷积与卷积核…...

UDP 广播组播点播的区别及联系

1、网络IP地址的分类 组播地址是分类编址的IPv4地址中的D类地址&#xff0c;又叫多播地址&#xff0c;他的前四位必须是1110&#xff0c;所以网络地址的二进制取值范围是11100000~11101111对应的十进制为 224~~239。所以以224~239开头的网络地址都是组播地址。 组播地址的功能…...

STM32补充——IAP

0 前置知识&#xff1a; FLASH相关内容&#xff1a;前往STM32补充——FLASH STM32三种烧录方式&#xff08;看看就行&#xff09;&#xff1a; 1.ISP&#xff1a;In System Programming&#xff08;在系统编程&#xff09; 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...