数据结构(Java实现):顺序表

目录

  • 1. 线性表
  • 2.顺序表
    • 2.1自己实现一个List接口
    • 2.2 IList接口的实现
    • 2.3 测试代码

1. 线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
在这里插入图片描述

2.顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

2.1自己实现一个List接口

public interface IList {// 新增元素,默认在数组最后新增void add(int data);// 在 pos 位置新增元素void add(int pos, int data);// 判定是否包含某个元素boolean contains(int toFind);// 查找某个元素对应的位置int indexOf(int toFind);// 获取 pos 位置的元素int get(int pos);// 给 pos 位置的元素设为 value -> 更新void set(int pos, int value);//删除第一次出现的关键字keyvoid remove(int toRemove);//删除所有关键字keypublic void removeAll(int toRemove);// 获取顺序表长度int size();// 清空顺序表void clear();// 打印顺序表,// 注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的void display();//判断线性表是否满了boolean isFull();
}

2.2 IList接口的实现

下面是具体实现的代码

public class MyArray implements IList{public int[] values1;//存储具体值public int usedSize;//线性表中数据个数public MyArray(){usedSize=0;values1=new int[10];}//判满public boolean isFull(){return usedSize == values1.length;}//尾插@Overridepublic void add(int data) {if(isFull()){values1= Arrays.copyOf(values1,usedSize*2);}values1[usedSize]=data;usedSize++;}
//判断指定位置插入数据的这个指定位置是否合法private void posLegal(int pos)throws PosIllegalException{if(pos<0||pos>usedSize){throw new PosIllegalException();}}//指定位置插入数据@Overridepublic void add(int pos, int data) {if(isFull()){values1= Arrays.copyOf(values1,usedSize*2);}try {posLegal(pos);}catch (PosIllegalException e){e.printStackTrace();}for (int i=usedSize;i>pos;i--){values1[i]=values1[i-1];}values1[pos]=data;usedSize++;}//是否存在目标值@Overridepublic boolean contains(int toFind) {for(int i=0;i<usedSize;i++){if(toFind==values1[i]){return true;}}return false;}//返回需要找到值的下标@Overridepublic int indexOf(int toFind) {for(int i=0;i<usedSize;i++){if(toFind==values1[i]){return i;}}return -1;}//判断获取指定下标值或者修改指定位置的值的指定位置是否合法private void posLegal1(int pos)throws PosIllegalException{if(pos<0||pos>=usedSize){throw new PosIllegalException();}}//获取指定下标的值@Overridepublic int get(int pos) {try {posLegal1(pos);}catch (PosIllegalException e){e.printStackTrace();}return values1[pos];}//修改指定下标的值@Overridepublic void set(int pos, int value) {try {posLegal(pos);}catch (PosIllegalException e){e.printStackTrace();}values1[pos]=value;}//移除首个出现的目标值@Overridepublic void remove(int toRemove) {int pos=indexOf(toRemove);for(int i=pos;i<usedSize-1;i++){values1[i]=values1[i+1];}usedSize--;}//移除所有目标值public void removeAll(int toRemove){int pos=indexOf(toRemove);int count=1;for(int i=pos,j=pos+1;j<usedSize;i++,j++){if(values1[j]==toRemove){j++;count++;}values1[i]=values1[j];}usedSize-=count;}//获取顺序表数据个数@Overridepublic int size() {return usedSize;}//清空顺序表@Overridepublic void clear() {usedSize=0;values1=null;}//打印顺序表@Overridepublic void display() {for(int i=0;i<usedSize;i++){System.out.println(values1[i]);}}}

自定义指定位置非法异常

public class PosIllegalException extends RuntimeException{public PosIllegalException(){}public PosIllegalException(String arg){super(arg);}
}

2.3 测试代码

实现完上面代码后可通过下方代码进行测试

public static void main(String[] args) {IList myArray=new MyArray();myArray.add(1);myArray.add(2);myArray.add(3);myArray.add(4);myArray.add(5);myArray.add(6);myArray.add(1);myArray.add(7);myArray.add(3,99);System.out.println( myArray.contains(99));System.out.println(myArray.indexOf(99));System.out.println(myArray.get(5));myArray.set(4,23);myArray.remove(23);myArray.removeAll(1);System.out.println(myArray.size());System.out.println("=======");myArray.display();myArray.clear();System.out.println("========");myArray.display();}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《云原生安全攻防》-- 构建云原生攻防场景

在本节课程中&#xff0c;我们将学习云原生攻防场景的构建。为了研究云原生安全攻击案例&#xff0c;我们需要搭建一个云原生攻击测试环境&#xff0c;以便进行攻防研究和攻击手法的复现。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; 构建云原生攻防场景&#xf…

求两个数的差值

描述 根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b为8bit位宽的无符号数。如果a>b&#xff0c;则输出a-b&#xff0c;如果a≤b&#xff0c;则输出b-a。 接口信号图如下&#xff1a; 使用Verilog HDL实现以上功能并编写testbench验证。 …

高校普法|基于SSM+vue的高校普法系统的设计与实现(源码+数据库+文档)

高校普法系统 目录 基于SSM&#xff0b;vue的高校普法系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3律师功能模块 4学生功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

国标GB28181协议EasyGBS视频监控云平台端口正常却不能播放,是什么原因?

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

号外!IP SSL证书申请只需十分钟!

IP SSL证书是一种专为IP地址设计的SSL证书&#xff0c;它使得基于IP地址的网站或服务能够实现HTTPS加密&#xff0c;确保数据在传输过程中的安全性和完整性。以下是关于IP SSL证书的一些技术性要点和申请流程概述&#xff1a; 一、IP SSL证书技术要点 1、适用场景&#xff1a…

ASP.NET Web Api 如何使用 Swagger 管理 API

前言 Swagger 是一个开源的框架&#xff0c;支持 OpenAPI 规范&#xff0c;可以根据 API 规范自动生成美观的、易于浏览的 API 文档页面&#xff0c;包括请求参数、响应示例等信息&#xff0c;并且&#xff0c;Swagger UI 提供了一个交互式的界面&#xff0c;可以帮助我们快速…

【CSP CCF记录】202012-1 期末预测之安全指数

题目 代码 #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int sum0;for(int i0;i<n;i){int score0,w0;cin>>score>>w;sumscore*w;}summax(sum,0);cout<<sum;return 0; } 结果

C++哈希(个人笔记)

C哈希 1.unordered_mapd1.1unordered_map的构造函数1.2unorder_map的容量1.3unordered_map的迭代器1.4unordered_map的元素访问1.5unorder_map的查找1.6unordered_map的修改操作1.7unordered_map的桶操作 2.unordered_set3.unordered_set和unordered_set的笔试题4.哈希4.1哈希概…

CNN/TCN/LSTM/BiGRU-Attention到底哪个模型效果最好?注意力机制全家桶来啦!

​ 声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍 效果展示 原理简介 代…

局域网内访问vue3项目|Network: use --host to expose

背景 我希望在相同的局域网内&#xff0c;通过手机访问我在Vue 3项目中展示的效果 遇到的问题 使用Vue CLI的–host选项实现局域网内的应用程序测试 当使用Vue CLI在本地提供服务时&#xff0c;通过使用 --host 选项&#xff0c;你可以指定要公开应用程序的主机。默认情况下&a…

纯福利|手把手教你如何白嫖免费的GPU资源(二)

大家好&#xff0c;我是无界生长。 前段时间写过一篇文章《纯福利&#xff5c;手把手教你如何白嫖免费的GPU资源&#xff08;一&#xff09;》&#xff0c;使用Google Colab提供的免费的GPU资源&#xff0c;今天接着写白嫖GPU资源攻略&#xff0c;可获得“长期免费的CPU实例资源…

ARM据称将开发AI芯片,计划在2025年秋季开始量产

KlipC报道&#xff1a;软银集团下的芯片设计公司ARM将成立一个AI芯片部门&#xff0c;目标在2025年推出首批产品。 ARM是日本软银旗下的公司&#xff0c;成立34年&#xff0c;一直在科技行业中扮演着不可或缺的角色。此次&#xff0c;ARM将承担初期开发成本&#xff0c;预计将…