模拟实现顺序表

模拟实现顺序表

  • 一:线性表
    • 1:线性表的概念:
  • 二:顺序表:
    • 1:顺序表的概念:
      • 1. 实现 ArrayList 类

一:线性表

1:线性表的概念:

线性表是n个具有相同特性的数据元素的有限序列。
常见的线性表有:顺序表,链表,栈,队列…
线性表在逻辑上是连续的(线性结构),在空间上(内存存储)不一定是连续的。线性表在空间上存储时,一般以数组或链式结构的形式存储。

二:顺序表:

1:顺序表的概念:

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

1. 实现 ArrayList 类

public class MyArraylist {public int[] elem;public int usedSize;//0//默认容量private static final int DEFAULT_SIZE = 10;public MyArraylist() {this.elem = new int[DEFAULT_SIZE];}/*** 打印顺序表:*   根据usedSize判断即可*/public void display() {}// 新增元素,默认在数组最后新增public void add(int data) {}/*** 判断当前的顺序表是不是满的!* @return true:满   false代表空*/public boolean isFull() {}private boolean checkPosInAdd(int pos) {return true;//合法}// 在 pos 位置新增元素public void add(int pos, int data) {}// 判定是否包含某个元素public boolean contains(int toFind) {return false;}// 查找某个元素对应的位置public int indexOf(int toFind) {return -1;}// 获取 pos 位置的元素public int get(int pos) {}private boolean isEmpty() {}// 给 pos 位置的元素设为【更新为】 valuepublic void set(int pos, int value) {}/*** 删除第一次出现的关键字key* @param key*/public void remove(int key) {}// 获取顺序表长度public int size() {}// 清空顺序表public void clear() {}
import java.util.Arrays;class MyArraylist {public int[] elem;public int usedSize;//0//默认容量private static final int DEFAULT_SIZE = 10;//初始化顺序表usedSize=0;public MyArraylist() {this.elem = new int[DEFAULT_SIZE];}/*** 打印顺序表:* 根据usedSize判断即可*/public void display() {//遍历顺序表for (int i = 0; i < usedSize; i++) {System.out.print(elem[i] + " ");}System.out.println();}// 新增元素,默认在数组最后新增public void add(int data) {if (isFull()) {//判断是否为满了,数组满了需要扩容elem = Arrays.copyOf(elem, elem.length * 2);}elem[usedSize] = data;usedSize++;}/*** 判断当前的顺序表是不是满的!** @return true:满   false代表空*/public boolean isFull() {//如果数组满了,返回truereturn usedSize == elem.length;}private boolean checkPosInAdd(int pos) {if (pos > 0 || pos <= usedSize) {return true;} else {return false;}}// 在 pos 位置新增元素public void add(int pos, int data) {if (checkPosInAdd(pos)) {//判断pos位置是否合法for (int i = usedSize - 1; i <= pos; i++) {elem[i + 1] = elem[i];}elem[pos] = data;usedSize++;} else {throw new PosException("pos越界:pos=" + pos);}}// 判定是否包含某个元素public boolean contains(int toFind) {for (int i = 0; i < usedSize; i++) {if (elem[i] == toFind) {return true;}}return false;}// 查找某个元素对应的位置public int indexOf(int toFind) {for (int i = 0; i < usedSize; i++) {if (elem[i] == toFind) {return i;}}return -1;}// 获取 pos 位置的元素public int get(int pos) {//pos位置是否合法if (pos < 0 || pos >= usedSize) {throw new PosException("pos越界:pos=" + pos);}if(isEmpty()){//顺序表是否为空throw new IsEmptyExcepptiom("顺序表为空");}return elem[pos];}private boolean isEmpty() {if (usedSize == 0) {return true;}return false;}// 给 pos 位置的元素设为【更新为】 valuepublic void set(int pos, int value) {if (pos < 0 || pos >= usedSize) {//pos位置是否合法throw new PosException("pos越界:pos=" + pos);}elem[pos] = value;}/*** 删除第一次出现的关键字key** @param key*/public void remove(int key) {if(isEmpty()){throw new IsEmptyExcepptiom("顺序表为空");}int index=indexOf(key);for (int i = index; i < usedSize - 1; i++) {elem[i] = elem[i + 1];}usedSize--;}// 获取顺序表长度public int size() {return usedSize;}// 清空顺序表public void clear() {usedSize = 0;}
}
**顺序表模拟实现**
public class Test {public static void main(String[] args) {MyArraylist myArraylist=new MyArraylist();myArraylist.add(1);myArraylist.add(2);myArraylist.add(3);myArraylist.add(4);myArraylist.add(5);myArraylist.display();myArraylist.set(0,100);myArraylist.display();myArraylist.remove(2);myArraylist.display();}
}

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

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

相关文章

代码随想录算法训练营第五十九天|503. 下一个更大元素 II、42. 接雨水

第十章 单调栈part02 503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之…

快速去除Excel表格密码,轻松解锁保护,省时又省力

“忘记了Excel表格的密码&#xff1f;不用担心&#xff01;一种简单安全的方法帮你解决。具体步骤如下&#xff1a;第一步&#xff0c;打开电脑或手机并进入百度搜索。第二步&#xff0c;输入关键词‘密码帝官网’并点击搜索。第三步&#xff0c;找到官网后点击立即开始。第四步…

QIIME 2介绍

QIIME 2&#xff08;Quantitative Insights Into Microbial Ecology 2&#xff09;是一个用于分析和解释微生物组数据的开源生物信息学工具。它是QIIME的第二个版本&#xff0c;经过重新设计以提高灵活性、可扩展性和可重复性。 1. 关于QIIME 2的一些重要特征和概念&#xff1…

ArcGIS中如何建立土地利用规划数据库

一、建库步骤 - 收集土地利用规划资料,包括图件资料、数据资料和文本资料。 - 将收集到的数据进行整理和格式转换,使其符合ArcGIS 的数据格式要求。 - 在ArcGIS 中创建新的土地利用规划数据库,并定义相应的数据结构和字段。 - 将转换后的数据导入到新的土地利用规划数据库中…

进阶JAVA篇- Java 综合基本语法实践(习题一)

路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原 目录 第一道题&#xff1a;集合的灵活运用 第二道题&#xff1a;基础编程能力 第三道题&#xff1a; 手写 ArrayList 集合&#xff08;模拟实现 ArrayList 核心API&#xff09; 第四道题&#xff1a;二分查找的应用 第五道…

RandomAccessFile学习笔记

文章目录 RandomAccessFile学习笔记前言1、RandomAccessFile基本介绍1.1 RandomAccessFile相关基本概念1.2 RandomAccessFile家族体系 2、RandomAccessFile基本使用2.1 RandomAccessFile常用API介绍2.2 RandomAccessFile常用API演示2.3 RandomAccessFile实现断点续传 1、Random…

C语言--三目运算符

一.介绍⭐ <表达式1>&#xff1f;<表达式2>&#xff1a;<表达式3> 它的含义是&#xff1a;如果表达式1的值为真&#xff08;非零&#xff09;&#xff0c;则整个表达式的值为表达式2的值&#xff1b;否则&#xff0c;整个表达式的值为表达式3的值。 三目运算…

Python——常见内置模块

Python 模块&#xff08;Modules&#xff09;1、概念模块函数类变量2、分类3、模块导入的方法&#xff1a;五种4、使用import 导入模块5、使用from……import部分导入6、使用as关键字为导入模块或功能命名别名7、模块的搜索目录8、自定义模块 常见内置模块一、math模块二、rand…

【详解二叉树】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 树形结构 概念 树的示意图 树的基本术语 树的表示 树的应用 二叉树(重点) 二叉树的定义 二叉树的五…

交换技术-电路交换-报文交换-分组交换

交换技术是指主机之间、通信设备之间或主机与通信设备之间为交换信息所采用的数据格式和交换装置的方式。按交换技术可分为&#xff1a;电路交换、报文交换和分组交换。 电路交换 交换(switching)&#xff0c;就是按照某种方式动态地分配传输线路的资源。 电路交换是在源结点…

解决Vscode使用git提交卡住的问题

使用Vscode的git提交代码经常会很慢/卡住。 先点击左下角&#xff0c;进入设置 找到git的配置(建议直接搜索)&#xff0c;把use Editor As commit input的勾选去掉即可解决。

【批量修改文件名,并去掉括号】

操作 一、 批量修改文件名操作二、去除括号 一、 批量修改文件名操作 在浏览器等下载很多图片后&#xff0c;命名顺序乱七八糟&#xff0c;想要将图片进行重新命名&#xff0c;从数字1开始 首先&#xff0c;全选文件夹中的图片 右键&#xff0c;重明明&#xff0c;选择一张图…

【c++文件】

C是一种面向对象的编程语言&#xff0c;它广泛应用于各个领域&#xff0c;如游戏开发、嵌入式系统、操作系统等。在C编程中&#xff0c;文件操作是一项非常重要的技能。本文将介绍C文件操作的基本知识以及一些有趣的应用&#xff0c;带领大家一起探索C文件操作的魅力。 一、C文…

微服务-京东秒杀

1 项目介绍 技术栈 后端 SpringCloud 中Netflix 五大组件&#xff1a; EurekaRibbonHystrixOpenfeignZuul SpringBootSpringSpringMVCMyBatis 数据库 MySQLRedis 前端 html5cssjsjQuery 消息中间件 RabbitMQ 2 项目搭建 项目分析 后端 shop-parent [pom] &#xff08;商…

jQuery_08 each函数的使用

each函数的使用 可以循环数组&#xff0c;json&#xff0c;dom对象数组 1.$.each(要循环的内容,function(index,element){处理函数}) 要循环的内容可以是数组&#xff0c;json对象&#xff0c;dom数组 function&#xff1a;循环的处理函数 每个成员都会执行这个函数一次 index&…

pip install 使用清华镜像源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 官方文档&#xff1a; pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

11月25日,每日信息差

今天是2023年11月25日&#xff0c;以下是为您准备的10条信息差 第一、2023年贺岁档票房破2亿 第二、马云前助理&#xff1a;马家厨房不做预制菜 第三、我国西北地区首台抽水蓄能机组投产发电。阜康抽水蓄能电站&#xff0c;位于新疆昌吉回族自治州阜康市境内&#xff0c;安装…

kafka,RabbitMQ,RocketMQ,他们之间的区别,架构,如何保证消息的不丢失,保证不重复消费,保证消息的有序性

文章目录 Kafka、RabbitMQ、RocketMQ 之间的区别是什么&#xff1f;性能数据可靠性服务可用性功能 RabbitMQ如何保证消息不丢失&#xff1f;Kafka 的架构说一下&#xff1f;Kafka 怎么保证消息是有序的&#xff1f;Kafka 怎么解决重复消费&#xff1f;Kafka 怎么保证消息不丢失…

最新Midjourney绘画提示词Prompt教程无需魔法

最新Midjourney绘画提示词Prompt教程无需魔法使用 一、AI绘画工具 SparkAi【无需魔法使用】&#xff1a; SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypes…

C#,《小白学程序》第二十课:大数的加法(BigInteger Add)

大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。 重复了部分 19 课的代码。 1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary>…