十年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…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...