数据结构之静态链表

news2024/10/6 18:25:03
定义

用两个数组实现链表,一个数组存储数据,另一个数组记录当前数据的后继的下标。

示例

链表
数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
后继:next[] = { 1, 2, 3, 4, 5, -1, -1, -1, -1, -1}

说明

-1: 表示无效值

  1. data[0],无数据值,表示头节点
  2. next[0]为1,表示data[0]的后继为data[1]
  3. next[1]为2,表示data[1]的后继为data[2]
  4. next[2]为3,表示data[2]的后继为data[3]
  5. next[3]为4,表示data[3]的后继为data[4]
  6. next[4]为5,表示data[4]的后继为data[5]
操作
  1. 插入
    如:在28,前面插入17,则数组变化为
    数据:data[] = {-1, 34, 28, 53, 16, 25, 17, -1, -1, -1}
    后继:next[] = { 1, 6, 3, 4, 5, 2, -1, -1, -1, -1}
    说明:data数组,从下标1(下标0表示头结点)开始找到第一个无效值,当前为下标为6,将其设置为插入的数值,即data[6] = 17;调整34的后继为6,即next[1] = 6;调整17的后继为28,即next[6] = 2;
  2. 删除
    如:删除53,则数据变化为
    数据:data[] = {-1, 34, 28, -1, 16, 25, 17, -1, -1, -1}
    后继:next[] = { 1, 6, 4, -1, 5, 2, -1, -1, -1, -1}
    说明:找到后继节点为53的节点(28),下标为2;保存28的后继下标,即next[2](值为3);设置28的后继为其后继的后继,即next[2] = next[next[2]];设置下标3的数据及后继数组为-1,即data[3] = -1,next[3] = -1
扩展
  1. 循环链表
    后继数组中,设置最后一个节点的后继为头结点,如:
    数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
    后继:next[] = { 1, 2, 3, 4, 5, 0, -1, -1, -1, -1}
  2. 双向链表
    增加一个前驱数组,标识数据的前驱的下标,如
    数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
    后继:next[] = { 1, 2, 3, 4, 5, 0, -1, -1, -1, -1}
    前驱:prex[] = { 5, 0, 1, 2, 3, 4, -1, -1, -1, -1}

参考《算法训练营》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679946.html

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

相关文章

Linux2.基础指令(下)

1.uname -r :输出Linux内核版本信息。 2.linux2.6.*内核默认支持的文件系统有ext3,ext2,ext4,xfs,不支持ufs。 3.linux查看CPU占用的命令:top。 4.题目 5.题目 6.题目 7.重定向 echo "字符串1" :在屏幕上打印字符串1。 echo "字符串1" &g…

C语言督学营(初级阶段)

文章目录 初级阶段1.编程环境搭建、调试C的历史故事写代码快速提升的方法快捷键编程环境 Clion、断点调试(单步调试) 2.数据类型、标准输入输出数据分类printf整型进制转换内存视图ASCII码表计算器 scanf的原理 3.运算符与表达式C语言的13种运算符运算符优先级 4.选择、循环1.选…

【每日算法 数据结构(C++)】—— 01 | 平方值去重统计(解题思路STL法,双指针法、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路STL法双指针法 03 | 🧢 代码片段STL法双指针法 “Success is not final, failure is not fatal: It is the courage to continue that counts.” - Winston Churchill (成功并非终点&am…

Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

目录 Redis数据类型_String set get append strlen setex setnx getrange setrange incr decr incrby/decrby key step mset mget getset Redis数据类型_List lrange lpop/rpop lindex llen lrem linsert lset Redis数据类型_Set smembers sism…

如何在 JavaScript 中处理 HTML 事件?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是HTML事件Jav…

基于多进程并发-进程通讯之共享内存(shared memmory)

一、什么是共享内存 操作系统对进程内存实现原理: 现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程…

Python交互式模式的特点和用法

Python交互式(Interactive Mode)是一种Python语言的工作模式,与传统的编写、保存、运行的方式不同,它允许用户直接在控制台窗口中输入和执行Python代码。 Python交互式的特点包括: 实时性:每输入一条语句&a…

黑马程序员前端 Vue3 小兔鲜电商项目——(八)登录页面

文章目录 账号密码路由配置模版代码配置路由跳转 表单校验实现校验要求代码实现统一校验 登录基础业务实现统一错误信息提示Pinia 管理用户数据Pinia 用户数据持久化用户登录状态请求拦截器携带 token退出登录实现Token 失效拦截处理 登录页面的主要功能就是表单校验和登录登出…

【Redis 基础及在 Java 中的应用】

文章目录 Redis 基础及在 Java 中的应用1 Redis 入门1.1 Redis 简介1.2 Redis 下载与安装1.3 Redis服务启动与停止 2 数据类型2.1 介绍2.2 五种常用数据类型 3 常用命令3.1 字符串 string 操作命令3.2 哈希 hash 操作命令3.3 列表 list 操作命令3.4 集合 set 操作命令3.5 有序集…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架: SPI模块包含通信引脚封装,初始化,SPI三个基本时序单元(起始,终止,交换一个字节) W2…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的,这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析:包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…

排序算法之堆排序_20230624

排序算法之堆排序 前言 堆排序是基于比较排序的一类算法,算法重复利用堆(Binary heap)的特性,最大(最小)元素一定位于堆顶的位置,那么就可以提取堆顶元素,放置在数组的尾部位置,后再把剩余的元…

设计模式之状态模式笔记

设计模式之状态模式笔记 说明State(状态)目录状态模式示例类图抽象状态类环境角色类电梯开启状态类电梯关闭状态类电梯运行状态类电梯停止状态类测试类 说明 记录下学习设计模式-状态模式的写法。JDK使用版本为1.8版本。 State(状态) 意图:允许一个对象在其内部状态改变时改…

从零搭建一台基于ROS的自动驾驶车-----4.定位

系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出 Autolabor ROS机器人教程 从零搭建一台基于ROS的自动驾驶车-----1.整体介…

【Leetcode60天带刷】day25回溯算法——216.组合总和III,17.电话号码的字母组合

​ 题目: 216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1…

读书笔记--数据治理之术

继延续上一篇文章,对数据治理之术进行学习思考,这部分内容是本书整体内容的核心细节,内容比较多比较杂,通读了好长时间才动手总结整理,因此更新的慢了一些。数据治理之术是操作层面的技术或方法,数据治理相…

linux系统如何添加硬盘设备

前言: 今天记录一下硬盘方面的知识,主要讲一下分区、挂载方面的知识,心情太郁闷了,假期的最后一天。 1、硬盘的命名规则 现在的硬盘设备一般都会以“/dev/sd”开头,而一台主机上可以有多块硬盘设备,因此系…

6.24全球央行鹰派立场重现,下周黄金是否会继续下跌?

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(6月23日)美市尾盘,现货黄金收报1920.44美元/盎司,上升6.58美元或0.34%,日内最高触及1937.46美元/盎…

Linux基础服务3——samba

文章目录 一、基本了解1.1 服务安装1.2 服务进程和端口1.3 samba用户1.4 配置文件1.4.1 主配置文件1.4.2 配置文件参数 1.5 安全级别 二、访问samba2.1 参数测试2.2 交互式访问2.3 挂载访问2.3.1 临时挂载2.3.2 永久挂载 2.4 配置用户认证共享2.5 匿名共享 一、基本了解 什么是…

VS Code基于服务器中的docker的开发环境配置

VS Code基于服务器中的docker的开发环境配置 基于Dev Containers插件基于Jump Machine(跳板机)服务器通过ssh连接docker容器VS Code配置ssh config文件连接docker容器 基于Dev Containers插件 当然可以在vscode中直接下载Dev Containers插件&#xff0c…