十年JAVA搬砖路——数据结构线性结构
线性结构
线性表是一种数据结构,用于存储一组有序的数据元素。它的特点是数据元素之间存在一对一的关系,每个元素只有一个前驱和一个后继(除了第一个元素和最后一个元素)。线性表可以用数组或链表来实现。
数据是指事物的符号表示,可以是数字、字符、图像、声音等。数据可以通过线性表来组织和存储,以便进行操作和处理。线性表提供了一种简单而有效的方式来管理和访问数据,使得数据的存储和检索变得更加方便和高效。
线性表可以通过多种方式实现,其中最常见的两种方式是使用数组(顺序存储)和使用链表(链式存储)。
**1. 顺序存储:**线性表的顺序存储是通过数组来实现的。数组将元素按照顺序连续存储在内存中,每个元素占据固定大小的内存空间。顺序存储的优点是可以通过索引直接访问元素,访问速度快。但是插入和删除操作需要移动元素,效率较低。
2. 链式存储:线性表的链式存储是通过链表来实现的。链表由节点(Node)组成,每个节点包含数据和指向下一个节点的指针(或引用)。节点在内存中可以非连续存储,通过指针将它们连接起来。链式存储的优点是插入和删除操作只需要修改指针的指向,效率较高。但是链式存储不支持随机访问,需要从头节点开始遍历到目标位置才能访问元素。
顺序存储 数组的基本操作:
-
插入操作:在顺序存储结构中插入一个新元素,需要将插入位置之后的所有元素后移一位,然后将新元素放入指定位置。
-
删除操作:从顺序存储结构中删除一个元素,需要将删除位置之后的所有元素前移一位,覆盖被删除的元素。
-
访问操作:通过索引访问顺序存储结构中的元素,可以直接通过索引值来访问对应位置的元素。
-
查找操作:在顺序存储结构中查找指定元素,需要遍历整个存储结构,逐个比较元素的值,直到找到目标元素或者遍历结束。
-
更新操作:通过索引定位到顺序存储结构中的某个元素,然后修改该元素的值。
• 线单向性链表常见的操作包括:
-
插入操作:
- 头部插入:创建一个新节点,设置其数据值,并使其指针指向当前的第一个节点。更新头指针指向新节点。
- 尾部插入:创建一个新节点,设置其数据值,并使其指针指向 null。更新最后一个节点的指针指向新节点。
- 指定位置插入:定位到指定位置,创建一个新节点,设置其数据值,并使其指针指向该位置的下一个节点。更新前一个节点的指针指向新节点。
-
删除操作:
- 删除第一个节点:更新头指针指向第二个节点,并从链表中移除第一个节点。
- 删除最后一个节点:遍历链表找到倒数第二个节点,并将其指针指向 null。
- 删除指定节点:定位到要删除的节点,更新前一个节点的指针以跳过要删除的节点,并从链表中移除该节点。
-
遍历操作:
- 从头节点开始,通过跟随指针的指向依次遍历每个节点,直到到达链表的末尾。对每个节点执行所需的操作。
-
搜索操作:
- 从头节点开始,遍历链表并将每个节点的数据值与目标值进行比较。返回找到的节点或指示元素未找到。
• 线单循环链表操作:
插入操作:
头部插入数据:
- 创建一个新节点并设置其数据。
- 如果列表为空(head 为空),将新节点的下一个指针设置为自身,并将 head 指针更新到新节点。
- 如果列表不为空,请将新节点的下一个指针设置为当前头节点。
- 遍历列表以查找最后一个节点(下一个指针指向当前头节点的节点)。
- 更新最后一个节点的下一个指针以指向新的头节点。
- 更新指向新节点的头部指针。
中间或者尾部插入数据: - 使用要插入的数据创建一个新节点。
- 遍历链表,直到到达所需位置的节点。还要跟踪上一个节点。
- 设置新节点的下一个指针到上一个节点的下一个节点。
- 设置上一个节点的下一个指针到新节点。
- 如果所需位置位于链表的末尾(即最后一个节点),请更新新节点的下一个指针以指向头节点。
删除操作
- 通过遍历链表并跟踪上一个节点来查找要删除的节点。
- 更新上一个节点的下一个指针,跳过要删除的节点,指向下一个节点。
- 如果要删除的节点是头节点,请更新头指针以指向下一个节点。
- 如果要删除的节点是最后一个节点,请更新上一个节点的下一个指针以指向头节点。
遍历操作/搜索操作
若要遍历单循环链表,可以从头节点开始并继续遍历,直到再次到达头节点。由于它是一个循环链表,因此您需要通过检查是否再
次到达头节点来确保不会陷入无限循环。
• 双向链表操作:
插入操作
- 创建一个新的节点,并将要插入的值存储在该节点中。
- 如果链表为空,则将新节点设置为链表的头节点。
- 如果要插入的位置是链表的头部,则将新节点插入到链表的头部,并将原来的头节点设置为新节点的后继节点。既新节点的后续节点指向原来的头结点,原来头节点的前驱节点指向新节点。
- 如果要插入的位置不是链表的头部,则需要遍历链表找到要插入位置的前一个节点。
- 将新节点的后继节点设置为前一个节点的后继节点,并将新节点的前驱节点设置为前一个节点。
- 将前一个节点的后继节点设置为新节点,并将新节点设置为后继节点的前驱节点。
删除操作
- 如果链表为空,则无法进行删除操作。
- 如果要删除的位置是链表的头部,则将头节点的后继节点设置为新的头节点,并将新的头节点的前驱节点设置为None。
- 如果要删除的位置不是链表的头部,则需要遍历链表找到要删除位置的节点。
- 将要删除节点的前驱节点的后继节点设置为要删除节点的后继节点。
- 如果要删除节点的后继节点不为空,则将要删除节点的后继节点的前驱节点设置为要删除节点的前驱节点
相关文章:

十年JAVA搬砖路——数据结构线性结构
线性结构 线性表是一种数据结构,用于存储一组有序的数据元素。它的特点是数据元素之间存在一对一的关系,每个元素只有一个前驱和一个后继(除了第一个元素和最后一个元素)。线性表可以用数组或链表来实现。 数据是指事物的符号表…...

Mybatis为什么需要预编译等一系列问题
1 SQL 预编译 SQL 预编译是一种提高数据库访问效率的技术,它通过将 SQL 语句预编译并存储在数据库中,减少每次执行时需要进行解析和编译的开销,从而提高数据库访问的效率。 在预编译阶段,SQL 语句会被解析并转换为可执行的二进制…...

【JVM基础】JVM入门基础
目录 JVM的位置三种 JVMJVM体系结构类加载器双亲委派机制概念例子作用 沙箱安全机制组成沙箱的基本组件 NativeJNI:Java Native Interface(本地方法接口)Native Method Stack(本地方法栈) PC寄存器(Program…...

【SpringBoot】详细介绍Spring Boot中@Component
在Spring Boot中,Component是一个通用的注解,用于标识一个类是Spring框架中的组件。Component注解是Spring的核心注解之一,它提供了自动扫描和实例化bean的功能。 具体来说,Component注解的作用是将一个普通的Java类转化为Spring…...

Redis执行lua脚本-Time函数-获取当前时间
演变过程: TIME 命令返回当前服务器的时间,包含两个条目 Unix 时间戳和这一秒已经过去的微秒数。 eval " local res redis.call(time); return res; " 0 eval " local current_time redis.call(TIME) local unix_timestamp tonumb…...

前端无需install快速调试npm包,Console-Import使用
Console-Import是一个Chrome扩展插件,可以方便地从Chrome控制台导入JavaScript和CSS资源。它可以帮助我们在开发过程中快速调试和测试第三方库或代码。 下载地址 安装 要安装Console-Import,请在Chrome网上应用店搜索“Console-Import”,然…...

构建稳定的爬虫系统:如何选择合适的HTTP代理服务商
在构建一个稳定、高效的爬虫系统中,选择合适的HTTP代理服务商是至关重要的一步。本文将介绍如何选取可靠且性能优秀的HTTP代理服务供应商,来完成搭建一个强大而稳定的爬虫系统。 1.了解不同类型和特点 -免费公开代理服务器:提供免费但可能存在限制或不…...

Python爬虫基础:使用Scrapy库初步探索
Scrapy是Python中最流行的网页爬虫框架之一,强大且功能丰富。通过Scrapy,你可以快速创建一个爬虫,高效地抓取和处理网络数据。在这篇文章中,我们将介绍如何使用Scrapy构建一个基础的爬虫。 一、Scrapy简介及安装 Scrapy是一个用…...

MacBookPro重装系统图文教程
关机 长按电源按钮10s即可强制关机 快捷键选择 Intel Command-R:获得安装过的最新的 macOS,但不会升级到最高版Option-Command-R:获得与 Mac 兼容的最新版 macOSShift-Option-Command-R:获得 Mac 自带的 macOS 或者与它最接近且…...

Android 6.0长按电源键添加重启菜单
重启图标:frameworks/base/core/res/res/drawable-hdpi/ic_lock_power_reboot_alpha.pngframeworks/base/core/res/res/drawable/ic_lock_power_reboot.xml <?xml version"1.0" encoding"utf-8"?> <!-- Copyright (C) 2014 The And…...

Python股票交易---均值回归
免责声明:本文提供的信息仅用于教育目的,不应被视为专业投资建议。在做出投资决策时进行自己的研究并谨慎行事非常重要。投资涉及风险,您做出的任何投资决定完全由您自己负责。 在本文中,您将了解什么是均值回归交易算法ÿ…...

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制
一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计,包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头,以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…...

有哪些前端调试和测试工具? - 易智编译EaseEditing
前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题,确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具: 调试工具: 浏览器开发者工具: 现代浏览器(如Chrome、Firefox、Safari等&#…...

【数据结构】手撕单链表
目录 一,链表的概念及结构 二,接口实现 1,单链表的创建 2,接口函数 3,动态创立新结点 4,打印 5,头插 6,头删 7,尾插 8,尾删 9,查找 10ÿ…...

两个git本地如何配置两个ssh密钥for mac
我是在mac上操作的。windows上也差不多一样操作。 1.找到本地的.ssh文件。我的文件结构如下如: 文件结构: (1)两个known_hosts文件是自动生成的,不用管 (2)readme文件是我个人记事本记录笔记…...

iOS逆向进阶:iOS进程间通信方案深入探究与local socket介绍
在移动应用开发中,进程间通信(Inter-Process Communication,IPC)是一项至关重要的技术,用于不同应用之间的协作和数据共享。在iOS生态系统中,进程和线程是基本的概念,而进程间通信方案则为应用的…...

qt day 1
this->setWindowIcon(QIcon("D:\\zhuomian\\wodepeizhenshi.png"));//設置窗口的iconthis->setWindowTitle("鵬哥快聊");//更改名字this->setFixedSize(500,400);//設置尺寸QLabel *qlnew QLabel(this);//創建一個標簽ql->resize(QSize(500,20…...

针对java中list.parallelStream()的多线程数据安全问题我们采用什么方法最好呢?
当使用List.parallelStream()方法进行多线程处理时,可能会涉及到数据安全问题。下面是一些常见的方法来处理parallelStream()的多线程数据安全问题: 1. 使用线程安全的集合:Java中提供了线程安全的集合类,如CopyOnWriteArrayList…...

校园用电安全管理系统可以识别违规电器吗
校园用电安全管理系统是处理恶意用电问题有效手段之一,系统具有实时监测、异常预警、监测设备运行状态、远程控制用电等功能,可以从根本上管理学校用电量,制定合理的用电计划,限制用电成本,避免各种恶意用电行为&#…...

前端(十五)——开源一个用react封装的图片预览组件
👵博主:小猫娃来啦 👵文章核心:开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee:点此跳转下载 CSDN…...

idea新建Java-maven项目时,出现Dependency ‘ xxx(jar包名)‘ not found的解决方案
项目场景: 项目场景:使用idea创建maven项目时,导入简单依赖时(本文以mysql-connector-java为例)。 问题描述 问题: 首先,在创建新的maven项目中,出现下列两种情况: &am…...

C# 获取Windows系统版本注意事项
首先通过微软官方文档:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号 下面介绍3种获取版本号的方式及弊端 1. Environment.OSVersion.Version OperatingSystem os Environment.OSVersion;// 判断…...

STM32设计的宠物投喂器(正点原子mini开发板+2.8寸屏)
一、设计需求 【1】 项目背景 在竞争日益激烈的今天,各行各业为提高竞争力,纷纷推出了各种新、奇的事物来吸引消费者。经过长时间的市场调查,发现广大市民及民营企业家大多还采用传统的人工喂养方式,这种方式不但耗费了大量的人力资源,而且由于现在的人力成本的不断增加…...

Python编程——深入了解不可变的元组
作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…...

JVM——类加载与字节码技术—类加载器+运行期优化
5.类加载器 jdk的类加载器具有层级关系。 启动类加载器》扩展类加载器》应用程序类加载器》自定义类加载器 对应类加载器只会负责加载对应目录的类。 双亲委派上级机制 应用程序类加载器加载一个类之前会先查询上级加载器是否已经加载过了该类。然后再让上级询问上上级。都…...

[linux实战] 华为云耀云服务器L实例 Java、node环境配置
系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 文章目录 系列文章目录前言一、任务拆解二、修改密码三、配置安全规则四、远程登录并更新apt五、安装、配置JDK环境5.1、安装openjdk,选择8版本5.2、检查jdk配置 六、安装、配置git6.1、安装git6.2…...

python面试:使用cProfile剖析程序性能
我们需要安装tuna:pip install tuna 程序执行完毕后,我们会得到一个results.prof,在CMD中输入指令:“tuna results.prof”。 import time import cProfile import pstatsdef add(x, y):resulting_sum 0resulting_sum xresulti…...

leetcode-188-买卖股票的最佳时机 IV
1. 问题描述 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ 2. 解题代码 public class Solution {public int MaxProfit(int k, int[] prices) {if(prices.Length<2){return 0;}if(k0){return 0;}List<int> listValuenew List<…...

Grounded Language-Image Pre-training论文笔记
Title:Grounded Language-Image Pre-training Code 文章目录 1. 背景2. 方法(1)Unified Formulation传统目标检测grounding目标检测 (2)Language-Aware Deep Fusion(3)Pre-training with Scala…...

成集云 | 钉钉财务费用单同步至畅捷通 | 解决方案
源系统成集云目标系统 方案介绍 财务管理作为企业管理中重要的组成部分,在企业的发展和成长中扮演着重要角色,成集云以钉钉费用单OA审批与畅捷通TCloud系统为例,与钉钉连接器深度融合,通过数据处理和字段匹配实现了费用…...