数据结构之静态链表

news/2025/2/23 9:49:23
定义

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

示例

<a class=链表" />
数据: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.niftyadmin.cn/n/464791.html

相关文章

利用numpy解决解方程组的基本问题

1 问题 进入大学&#xff0c;我们接触了线性代数&#xff0c;利用线性代数解方程组比高中慢慢计算会好了许多&#xff0c;快捷许多&#xff0c;我们作为编程人员&#xff0c;有没有用python解决解方程组的办法呢&#xff1f; 2 方法 我们提出使用python的numpy解方程。 找到用于…

wpf增加系统托盘图标

使用系统托盘&#xff0c;可以为用户提供一个简便快捷的操作习惯。 wpf中增加系统托盘图标有2种 第一种&#xff0c;使用Hardcodet.NotifyIcon.Wpf开源组件 1.建立一个wpf程序 2.安装Hardcodet.NotifyIcon.Wpf 3.增加图片 图片选择资源&#xff0c;否则获取不到路径 4.界面…

小鱼C python - 集合的练习

题一&#xff1a;用字典实现集合的去重特性 1. 生成100个1&#xff5e;100的随机值 思路&#xff1a; 1. range 范围 2. random.randint(a,b) import random x [] for I in range(100):x.append(random.randint(1,100)) print(x) 2. x和y的交集 思路&#xff1a;1.遍历x,…

材料表面与界面 关键概念介绍

目录 1. Conductivity and two general modes of charge transport in solid-state materials (Fig. 1b) 2. What is Bravais lattice, what is basis and what is crystal lattice (Fig. 2). The differences between five possible Bravais lattices in two dimensions (Fi…

chatgpt赋能python:Python等待一秒-程序员必知的等待操作

Python等待一秒 - 程序员必知的等待操作 时间是宝贵的资源&#xff0c;你可能会需要让你的Python程序等待一段时间才能继续执行。在这篇文章中&#xff0c;我们将学习如何使用Python等待一秒&#xff0c;包括为什么需要等待&#xff0c;以及在Python中如何等待。 为什么需要等…

ATA-8000系列射频功率放大器——在生物医学中的应用

ATA-8000系列射频功率放大器——在生物医学研究中的应用 ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&…

chatgpt赋能python:Python中的空格:一种重要的编程元素

Python中的空格&#xff1a;一种重要的编程元素 在Python编程中&#xff0c;空格是被广泛使用的重要元素之一。本文将介绍Python中空格的重要性&#xff0c;并探讨空格在编程中的不同应用。 为什么空格在Python编程中如此重要&#xff1f; Python对空格敏感&#xff0c;意味…

[Hadoop] 期末答辩问题准备

0.相关概念 1.什么是NameNode&#xff1f; NameNode是整个文件系统的管理节点&#xff0c;它维护着整个文件系统的文件目录树&#xff0c;文件/目录的元信息和每个文件对应的数据块列表。并接收用户的操作请求。 2.SecondaryNameNode的主要作用&#xff1f; SecondaryNameN…