静态链表及其操作

2023-10-29

静态链表就是利用数组来实现链表,目的是为了整合顺序表和链表的优势。比如顺序表适合定位元素,链表适合删除和插入元素等等。

本例子用Java来实现的,代码方面可能还有些不足,但是运行的结果是准确的,对于理解没有障碍

 

Demo类

package com.color.datestructure;

public class StaticArrayElemObject {
    String val;//本节点的值
    int next;//本节点的后继

    @Override
    public String toString() {
        return  val + " : " + next;
    }
}

实现类

package com.color.datestructure;


public class StaticArray {
    private  static int numsOfSaeos=0;
    public void initSAEO(StaticArrayElemObject[]saeos,int count){
        numsOfSaeos=count;
        for(int i=0;i<numsOfSaeos;i++){
            //给每个元素分配空间
            saeos[i]=new StaticArrayElemObject();
            //每个元素分配后置指针
            saeos[i].next=i+1;
            //每个元素赋值
            saeos[i].val=(char)('A'+i)+"";
        }
        //对链表首/尾进行处理
        saeos[0].val="我是链表首部!";
        saeos[numsOfSaeos-1].next=0;
    }
    public void printAllSAEOs(StaticArrayElemObject[]saeos){
        System.out.println("**************遍历数组****************");
        for(int i=0;i<numsOfSaeos;i++){
            System.out.println(i+" : "+saeos[i]);
        }
    }

    public void tranverseList(StaticArrayElemObject[]seaos){
        if(seaos.length<0)return;
        System.out.println("***********遍历链表************");
        StaticArrayElemObject seao=seaos[0];
        int i=0;
        while(i<numsOfSaeos){
            System.out.println(seao);
            seao=seaos[seao.next];
            i++;
        }
    }

    /**
     * 这里实现的是后插,即在链表上第position个元素的后面插入
     * @param saeos
     * @param position
     * @param value
     * @throws Exception
     */
    public void insert(StaticArrayElemObject[]saeos,int position, String value) throws Exception {
        if(numsOfSaeos==saeos.length)throw new Exception("已经没有多余空间了!!!");
        //插入的对象在数组空闲区域插入,只是改变next的值
        StaticArrayElemObject newSaeo=new StaticArrayElemObject();
        newSaeo.next=saeos[position].next;
        newSaeo.val=value;
        saeos[numsOfSaeos]=newSaeo;
        saeos[position].next=numsOfSaeos;
        numsOfSaeos++;
    }

    public void delete(StaticArrayElemObject[]saeos,int position) throws Exception {
        //这里进行的是删除链表上第position个元素
        if(position<=0||position>=numsOfSaeos) throw new Exception("所要删除的元素不存在!!!");
        StaticArrayElemObject saeo =saeos[0];
        int i=0;
        while(i<position-1){
            saeo=saeos[saeo.next];
            i++;
        }
        saeos[i].next=saeos[saeos[i].next].next;
    }

    public void update(StaticArrayElemObject[]saeos,int position, String value) throws Exception {
        //这里更新的是链表上第position个元素的值
        if(position<=0||position>=numsOfSaeos)throw new Exception("所要修改的元素不存在!!!");
        StaticArrayElemObject saeo =saeos[0];
        int i=0;
        while(i<position-1){
            saeo=saeos[saeo.next];
            i++;
        }
        saeos[saeo.next].val=value;
    }

    public void inquiry(StaticArrayElemObject[]saeos,int position) throws Exception {
        //查询数组中的元素很简单,这里主要是进行查询链表上第几个的元素
        if(position<=0||position>=numsOfSaeos)throw new Exception("所要查询的元素不存在!!!");
        StaticArrayElemObject saeo =saeos[0];
        int i=0;
        while(i<position){
            saeo=saeos[saeo.next];
            i++;
        }
        System.out.println(saeo);
    }

    public static void main(String[] args) {
        StaticArray sa=new StaticArray();
        //最高上限为20
        StaticArrayElemObject[]saeos=new StaticArrayElemObject[20];
        //首次只生成10个
        sa.initSAEO(saeos,10);
        //遍历数组
        sa.printAllSAEOs(saeos);
        try {
            //插入
            StaticArrayElemObject waitInsert=new StaticArrayElemObject();
            sa.insert(saeos,4,"测试");
            System.out.println("**********插入后的效果****************");
            sa.printAllSAEOs(saeos);
            //修改
            sa.update(saeos,5,"test");
            System.out.println("**********修改后的效果****************");
            sa.printAllSAEOs(saeos);
            //删除
            sa.delete(saeos,5);
            System.out.println("**********删除后的效果****************");
            sa.printAllSAEOs(saeos);
            //查询
            System.out.println("**********查询的效果****************");
            sa.inquiry(saeos,4);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态链表及其操作 的相关文章

  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • 如何让Spring RabbitMQ创建一个新的队列?

    根据我对rabbit mq的 有限 经验 如果您为尚不存在的队列创建新的侦听器 则会自动创建该队列 我正在尝试将 Spring AMQP 项目与rabbit mq 一起使用来设置侦听器 但出现错误 这是我的 xml 配置
  • 在 IntelliJ 上进行 Google App Engine Java 开发?

    令人烦恼的是 Google App Engine 已成为其中的另一个项目 他们只发布 Eclipse 插件 如 Spring Webflow 而我更喜欢 IntelliJ 你能用IntelliJ成功运行本地测试环境吗 并调试 部署本地或实时
  • 使用 Spring Data REST 处理自定义异常 (i18n)

    我正在使用 Spring Boot 1 5 4 和 Spring JPA Spring Data REST HATEOAS 我正在寻找一种最佳实践 Spring 方式 来自定义异常 Spring Data REST 正在管理添加 i18n
  • 如何识别 Java 中的不可变对象

    在我的代码中 我正在创建一个对象集合 这些对象将由各种线程以只有在对象不可变的情况下才安全的方式访问 当尝试将新对象插入到我的集合中时 我想测试它是否是不可变的 如果不是 我将抛出异常 我能做的一件事是检查一些众所周知的不可变类型 priv
  • 在 TestNG 中运行多个类

    我正在尝试自动化一个场景 其中我想登录一次应用程序 然后进行操作而无需再次重新登录 考虑一下 我有在特定类的 BeforeSuite 方法中登录应用程序的代码 public class TestNGClass1 public static
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • 如何修复 Android 7.0 的 Spinner 模式下的 DatePickerDialog?

    我目前正在开发一个简单的项目 其中包含一个包含在 Web 视图中的网站 具有少量交互 以提高网站本身和 Android 移动设备之间的交互性 由于该网站包含用户生日的日期输入字段 因此我希望实现一个与所有设备兼容的旋转格式的日期选择器 我尝
  • 尝试在java中的Arraylist中查找对象的所有出现

    我有一个 Java ArrayList 我需要查找其中出现的所有特定对象 ArrayList indexOf Object 方法只找到一次出现 所以看来我还需要其他东西 我认为你不需要太花哨 以下应该可以正常工作 static
  • 支持通过 OAuth 进行 Facebook/Twitter 身份验证的 CAS 服务器

    我正在寻找一个支持 Facebook Twitter 通过 OAuth 进行单点登录身份验证的 CAS 服务器 我检查过 JASIG CAS 服务器 但它看起来不支持它们 我的 java web 应用程序基于 Spring Security
  • 以编程方式设置 Logback Appender 路径

    我正在尝试以编程方式设置 Logback 附加程序路径 滚动文件附加器 http logback qos ch apidocs ch qos logback core rolling RollingFileAppender html准确地说
  • BlackBerry SQLite:将一个 SQLite 数据库连接到另一个

    我正在尝试使用 SQLite 将一个 SQLite 数据库附加到 BlackBerry 上的另一个数据库附加数据库 http www sqlite org lang attach html命令 Database d1 d2 Statemen
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 从命令行运行 Maven 插件的语法是什么。

    我看到这里已经有人问过这个问题 如何从命令行执行maven插件 https stackoverflow com questions 12930656 how to execute maven plugin from command line
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • 使用 Runtime.getRuntime().exec() 进行重定向不起作用

    我需要从程序执行命令 命令行是可以的 我在终端试了一下 但是在程序中不行 我从我的代码中添加一个副本 File dir new File videos String children dir list if children null Ei
  • Integer.parseInt 引发的 NumberFormatException

    嘿 我在学校上编码课 但老师没有很好地解释 所以我们必须在网上查找我所做的信息 但我无法找到代码中的错误 你能帮我吗 char end s do System out println Tipo de boleto char boleto c
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐

  • 【解决】android设备有root权限,执行“adb disable-verity”命令报错“verity cannot be disabled/enabled - USER build”

    这个错误提示意味着你的设备是使用USER版本的固件构建的 这个版本不允许禁用verity功能 但是 你可以尝试以下步骤来解决问题 确认你的设备是否已经root 可以通过执行 adb root 命令来检查 确认你的设备是否已经启用了开发者选项
  • vue-cli3.0 配置使用 less 全局样式

    在css样式文件夹中新增 global less 作为全局样式 在 main js 中通过 import 导入 可正常使用样式 但 global less 中定义的样式属性还不能全局使用 需通过以下方法配置 1 安装 style resou
  • 加密软件如何和PDM软件结合使用

    在企业里面都会用到加密软件 比如IP guard 壹加密 亿赛通等等 但是加密软件会导致PDM软件原本的各个功能都被限制 所以为了助力企业解决问题 更好的帮助企业完成PDM的正常使用 今天给大家分享一下解决方法 请看下文 SOLIDWORK
  • APP自动化测试-2. Appium录制测试用例

    APP自动化测试 2 Appium录制测试用例 文章目录 APP自动化测试 2 Appium录制测试用例 前言 一 android自动化依赖 1 adb依赖 2 android真机或模拟器 3 Appium Desktop Appium 二
  • CSS 鼠标样式和手指样式整理

    巧合要用到鼠标样式效果 就顺便整理了下十五种CSS鼠标样式 小例子供大家使用啊 CSS鼠标样式语法如下 任意标签中插入 style cursor 例 子 span 文本或其它页面元素 span a href 文本或其它页面元素 a 注意把
  • 【ReID】【代码注释】难样本三元组损失TriHard loss deep-person-reid/losses.py

    源码URL https github com michuanhaohao deep person reid blob master losses py TriHard loss部分的源码注释 class TripletLoss nn Mod
  • 多线程编程——实战篇(一)

    多线程编程 实战篇 二 多线程编程 实战篇 三 多线程编程 实战篇 四 在进入实战篇以前 我们简单说一下多线程编程的一般原则 安全性 是多线程编程的首要原则 如果两个以上的线程访问同一对象时 一个线程会损坏另一个线程的数据 这就是违反了安全
  • ClickHouse之建表优化和底层语法优化(谓词下推等)

    文章目录 一 建表优化 1 数据类型 1 1 时间字段的类型 1 2 空值存储类型 2 分区和索引 3 表参数 4 写入和删除优化 5 常见配置 5 1 CPU 资源 5 2 内存资源 5 3 存储 二 CK底层语法优化 1 count优化
  • Maven: maven parent.relativepath point at wrong local pom

    Maven maven parent relativepath point at wrong local pom 参考 https blog csdn net qwfys200 article details 82703025
  • DMA实验程序

    DMA实验程序 1 2 参数配置
  • 【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】

    前言 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格 我就开始惯例网上先找前人栽的树 我好乘凉 然后找了一圈发现 不管是主流的移动端ui库或者网上自己写的帖子 或者uniapp的插件网站 都没
  • 微信小程序新版canvas2d海报绘制(教你轻松搞定)

    效果 说明 canvas官方很早已经发声不再维护了 所以很多方法都已经不再适用 目前官方推荐适用canvas2d来绘制生成海报 canvas2d来绘制海报 canvas2d的优点 例如 不需要先预下载网络图片再绘制 前端只需要调用网络图片即
  • 物理层&数据链路层

    根据TCP IP体系 计算机网络分成4层体系结构 学习时作5层 物理层 比特流 数据链路层 帧 网络层 IP数据报 分组 运输层 报文 应用层 PDU 其中关系 对等层 gt 协议 上下层 gt 服务 物理层 物理层的数据传输单元为位 比特
  • 【mcuclub】继电器

    1 实物图 型号 SRD 05VDC SL C 2 原理图 3 内部构造 铁芯 线圈 衔铁 触点 弹簧 4 工作原理 只要在线圈两端加上一定的电压 线圈中就会流过一定的电流 从而产生电磁效应 衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸
  • 基于Spring事务的可靠异步调用实践

    SpringTxAsync组件是仓储平台组 WMS6 自主研发的一个专门用于解决可靠异步调用问题的组件 通过使用SpringTxAsync组件 我们成功地解决了在仓储平台 WMS6 中的异步调用需求 经过近二年多的实践并经历了两次618活动
  • caffe源码阅读《二》layer

    首先layer这个类是一个基类 所以他是没有cpp实现的 可以看一下它的cpp代码 include caffe layer hpp namespace caffe INSTANTIATE CLASS Layer namespace caff
  • Vulnhub靶机实战-Me-and-My-Girlfriend

    声明 好好学习 天天向上 搭建 使用virtualbox打开 网络和我的PRESIDENTIAL一样 是要vmware和virtualbox互连 渗透 存活扫描 发现目标 arp scan l 端口扫描 nmap T4 A 192 168
  • 类模板的偏特化

    Class templates 可以被偏特化 partial specialized 或称部份特化 局部特化 这使你得以在特定情形下使用特殊实作码 但仍然留给你 使用者 选择 template parameters 的能力 例如对于下面的
  • 蓝桥杯17届第九题——分巧克力(二分查找)

    前言 二分查找一般用于暴力枚举下的优化 在有序的条件下 能极大提升查找效率 分巧克力 儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见
  • 静态链表及其操作

    静态链表就是利用数组来实现链表 目的是为了整合顺序表和链表的优势 比如顺序表适合定位元素 链表适合删除和插入元素等等 本例子用Java来实现的 代码方面可能还有些不足 但是运行的结果是准确的 对于理解没有障碍 Demo类 package c