十年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…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
