线性表-顺序表

news2025/1/9 1:52:31

线性表

线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。

  • 前驱元素:若A元素在B元素的前面,则称A为B的前驱元素
  • 后继元素:若B元素在A元素的后面,则称B为A的后继元素

线性表的分类
线性表中数据存储的方式可以是顺序存储,也可以是链式存储,按照数据的存储方式不同,可以把线性表分为顺序表和链表。

顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系

在这里插入图片描述
顺序表API设计
类名 SequenceList
构造方法SequenceList(int capacity):创建容量为capacity的SequenceList对象
成员方法
1.public void clear():空置线性表
2.publicboolean isEmpty():判断线性表是否为空,是返回true,否返回false
3.public int length():获取线性表中元素的个数
4.public T get(int i):读取并返回线性表中的第i个元素的值
5.public void insert(int i,T t):在线性表的第i个元素之前插入一个值为t的数据元素。
6.public void insert(T t):向线性表中添加一个元素t
7.public T remove(int i):删除并返回线性表中第i个数据元素。
8.public int indexOf(T t):返回线性表中首次出现的指定的数据元素的位序号,若不存在,则返回-1。
成员变量
1.private T[] eles:存储元素的数组
2.private int N:当前线性表的长度

package com.vmware.list;

import java.util.Iterator;

public class SequenceList<T> implements List<T>, Iterable<T> {
    private T[] els;
    private int count;

    @SuppressWarnings(value = "unchecked")
    public SequenceList(int capacity) {
        this.els = (T[]) new Object[capacity];
    }

    @Override
    public void clear() {
        //清空数据
        for (int index = 0; index < count; index++) {
            els[index] = null;
        }
        count = 0;
    }

    @Override
    public boolean isEmpty() {
        return count == 0;
    }

    @Override
    public int length() {
        return count;
    }

    @Override
    public T get(int index) {
        return els[index];
    }

    @Override
    public void insert(T t) {
        if (count == els.length) {
            capacityExpansion(els.length << 1);
        }
        els[count++] = t;
    }

    @Override
    public void insert(T t, int index) {
        if (count == els.length) {
            capacityExpansion(els.length << 1);
        }
        //将指定索引之后的元素后移一位
        for (int start = count; start > index; start--) {
            els[start] = els[start - 1];
        }
        els[index] = t;
        count++;
    }

    @Override
    public T remove(int index) {
        T t = els[index];
        for (int i = index; i < count; i++) {
            els[i] = els[i + 1];
        }
        count--;
        if (count < els.length / 4) {
            capacityExpansion(els.length >> 1);
        }
        return t;
    }

    @Override
    public int indexOf(T t) {
        for (int i = 0; i < count; i++) {
            if (els[i] == t) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public Iterator<T> iterator() {
        return new SItr();
    }

    private class SItr implements Iterator<T> {
        private int cursor;

        public SItr() {
            cursor = 0;
        }

        @Override
        public boolean hasNext() {
            return cursor < count;
        }

        @Override
        public T next() {
            //获取元素并右移指针
            return els[cursor++];
        }
    }

    /**
     * @apiNote 扩容
     */
    @SuppressWarnings(value = "unchecked")
    private void capacityExpansion(int size) {
        T[] newArr = (T[]) new Object[size];
        //复制原数组内容
        for (int index = 0; index < count; index++) {
            newArr[index] = els[index];
        }
        els = newArr;
    }
}

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

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

相关文章

将gitee上的项目拉取到本地

gitee&#xff1a;中国最大的开源代码共享社区 目录 一、安装git 二、拉取项目 1、首先在gitee上找到自己想要学习的项目 2、在本地新建一个文件夹&#xff08;用来存放你从gitee上拉下来的项目&#xff09; 3、输入命令 4、选择下载的分支代码&#xff08;我这里是mas…

【web课程设计】基于html鲜花商城项目的设计与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

windows下使用免安装(.zip)MariaDB数据库

1. 下载 https://downloads.mariadb.org/ 2. 解压 3. 配置 cmd 进入bin目录 命令行输入&#xff1a;./mysqld.exe --install MariaDB 输出&#xff1a; 至此 安装成功 接下来进行data配置和初始化 4. 初始化 提示&#xff1a;非必要 如果直接执行服务启动命令&#xff1…

TF3-MongoDB基础

TF3-MongoDB基础课程介绍1、通用设置1.1 需求分析1.1.1 需求分析1.1.2 数据库表1.1.3 搭建提供者环境实体类mapper接口api接口api服务实现类1.2 查询通用设置1.2.1 接口文档1.2.2 代码实现vo对象SettingsControllerSettingServiceQuestionApiSettingApi1.2 陌生人问题1.2.1 接口…

STM32单片机软件模拟I2C读取AM2320温湿度传感器数据

STM32单片机使用软件模拟IIC读取AM2320温湿度传感器的数据并显示在0.96寸OLED屏上。 我用的单片机是STM32F103C8T6&#xff0c;程序用的是ST标准库写的。 STM32使用硬件I2C读取SHTC3温湿度传感器&#xff1a;https://blog.zeruns.tech/archives/692.html STM32单片机读取AHT1…

力扣242.有效的字母异位词(Java语言,排序法、散列表法)

题目描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 解题思路&#xff1a; 思路1&#xff1a;排序法 根据题目意思…

[附源码]Python计算机毕业设计SSM基于微信的基层党建信息系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

容量测试解决了什么问题?

前面几篇性能测试知识科普系列的文章&#xff0c;介绍了性能测试中的核心术语和指标、常用测试策略、压测工具选型、性能需求分析、测试能力分层、新手学习路径以及监控分析工具相关的内容&#xff0c;这些知识可以说是性能测试最基本的能力&#xff0c;也是日常工作中需要经常…

三大宇宙速度

文章目录第一宇宙速度&#xff1a;7.9km/s第二宇宙速度&#xff1a;11.2km/s第三宇宙速度&#xff1a;16.7km/s光年太阳系第一宇宙速度&#xff1a;7.9km/s 1.第一宇宙速度(环地飞行速度)&#xff1a;航空器绕地球飞行&#xff0c;成为地球卫星的最低速度。 2.提出者牛顿。基于…

springcloud-05分布式事务

第五章 分布式事务Seata 在微服务系统中&#xff0c;分布式事务是我们必须要面临和解决的问题&#xff01;&#xff01;&#xff01; 1. 分布式事务问题的产生 下图中的例子可以很好的解释分布式事务问题出现的场景&#xff1a; 图中问题的产生就在于更新库存数量是1个单独…

泛型Java

泛型 泛型&#xff1a;标签 集合接口和集合类在jdk5.0之后都修改为带泛型的结构在实例化集合类时&#xff0c;可以指明具体的泛型类型指明完以后&#xff0c;在集合类或者集合接口中凡是定义类或接口时&#xff0c;内部结构使用到泛型的位置&#xff0c;都指定为实例化时的泛…

Java姓名与手机号中间用*号代替 字符串*号替换

/*** 姓名与手机号中间用*号代替*/public static String caseStarSymbol(String nameStr){ // String nameStr "程序源码论坛"; // String mobile "15888888888";String nameStr1 null;char[] r nameStr.toCharArray(); // char[] m mobi…

服务器硬件规格常用查看命令——磁盘相关命令

smartctl smartctl是一个能够控制和监控磁盘的SMART&#xff08;Self-Monitoring&#xff0c;Analysis and Reporting Technology&#xff0c;自我监测、分析和报告技术&#xff09;命令。 使用方法&#xff1a; 提示&#xff1a;使用该命令只能查看到裸盘设备的型号信息&…

ATtiny13与Proteus仿真-开发与Proteus仿真环境搭建

ATtiny13开发与Proteus仿真环境搭建 本文将详细介绍如何搭建ATtiny13开发环境与Proteus仿真环境。 1、ATtiny13开发环境搭建 本系列文章将使用Microchip Studio作为ATtiny13的集成开发环境(IDE)。 Microchip Studio 是一个集成开发环境 (IDE),用于开发和调试 AVR 和 SAM 微…

Microsoft .NET Desktop Runtime (Framework)

Microsoft .NET Desktop Runtime (Framework) 微软NET Framework或数据库网络是一种软件技术&#xff0c;包括Microsoft的几种编程语言。安装每个窗口后所需的工具之一是NETFramework技术。会的。基于这种技术编写的许多软件工具&#xff0c;它们将得到支持。 -是的。 微软得分…

什么是运放的输入失调电压

大家可以看到这个电路&#xff0c;运放的同相端和反相端都接在0V&#xff0c;大家觉得运放的输出电压是多少。 很多同学觉得&#xff0c;在开环条件下根据运放的传输曲线&#xff0c;当同相端电压等于反相端电压时&#xff0c;运放的输出电压等于0&#xff0c; 可是实际测量运放…

语音识别之Kaldi:神经网络实战

ASR神经网络实战 kaldi语音识别理论与实践课程学习。 之前学习了基于GMM-HMM的传统语音识别&#xff1a;GMM-HMM 其中也包含Kaldi架构的简介&#xff0c;语音数据的预处理&#xff0c;特征提取等过程。 今天学习基于神经网络的语音识别。 神经网络训练脚本 以TDNN为例。 K…

Python IDE之 pycharm的十大奇技淫巧

说到Python的IDE&#xff0c;可能大家都会想到一个非常有名的工具&#xff0c;就是pycharm&#xff0c;他是最受欢迎的一个Python开发工具&#xff0c;其原因就是因为功能强大&#xff0c;适合构建大型项目&#xff0c;当然啦&#xff0c;功能强大同时也就意味着操作复杂&#…

语音学发音语音学笔记

词汇表 articulators 咬合架发音器 cochlea 耳蜗 consonants 元音 dialect 方言 eardrum 鼓膜 endolymph 内淋巴 Epiglottis 喉头盖 formants 共振峰 fricative 摩擦音 Larynx 喉 meatus 耳道 monosyllabic 单音节 pinna 耳廊 pitch 音调 pitch harmonics 音高泛音 phonation …

【云原生 | Kubernetes 实战】09、K8s 控制器 Replicaset 入门到企业实战应用

目录 K8s 控制器 Replicaset 一、Replicaset 控制器&#xff1a;概念、原理解读 1.1 Replicaset 概述 1.2 Replicaset 工作原理&#xff1a;如何管理 Pod &#xff1f; 二、Replicaset 资源清单文件编写技巧 三、Replicaset 使用案例&#xff1a;部署 Guestbook 留言板 …