Java实现顺序表

article/2025/8/22 3:35:32

目录

一、顺序表的简单理解

1、为什么我们要以数组为基础来构建顺序表呢?

2、顺序表都具有哪些功能

二、顺序表的代码实现

1、构建并且初始化顺序表

2、在顺序表中添加元素

1、判断需要添加元素的下标是否在顺序表的范围内

2、如果添加元素下标合法,进行添加元素操作。

3、判断顺序表是否满了满了的话我们需要进行扩容

4、实现代码如下:

3、打印顺序表中的元素

4、判断顺序表中是否含有某个元素

5、查找顺序表中元素的下标

6、更新顺序表对应下标的元素值

7、查找顺序表对应下标的元素值

8、删除顺序表中的元素

 9、获取顺序表的长度

10、清空顺序表

三、顺序表的缺点和优点总结 

1、顺序表的优点

2、顺序表的缺点


一、顺序表的简单理解

顺序表示用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般以数组为基础进行存储。

1、为什么我们要以数组为基础来构建顺序表呢?

首先,我们的数组是在内存中的顺序存储,因此他就可以更好的在逻辑上实现顺序表。

并且,数组里面存储的元素就像一个队伍一样,每个人都是紧密连接,既不能打乱队伍顺序,也不能跳过一个空位,去排下一个位置,并且每个人都有自己对应的编码,也就是他们的下标。

这就是一个数组,因此由于有以上的优势,他完全可以胜任顺序表的地基。

2、顺序表都具有哪些功能

首先顺序表会有增,删,查,找这四个功能,接下来我们将会用java代码的形式来对这些功能的实现并且构建一个顺序表。

二、顺序表的代码实现

1、构建并且初始化顺序表

首先我们需要构建一个顺序表,前文指出顺序表的地基为数组,因此我们需要一个数组,但是仅仅有一个数组是不够的,因为我们只知道数组的长度,并不知道其实数组里面存储了多少的元素,所以我们还需要一个东西来记录我们顺序表存储了多少的元素个数。

public class myArraysList {public int[]arrary;public int usedSize ;// 获取顺序表的有效数据长度public myArraysList(){this.arrary = new int[10];//初始化数组}
}

这里我定义了一个构造方法,目的是用来在方法内部定义数组大小,开辟空间。

2、在顺序表中添加元素

在添加元素时,我们需要考虑两点问题

1、判断需要添加元素的下标是否在顺序表的范围内

判断添加元素下标是否大于零,并且是否在顺序表存储元素数量范围内

2、如果添加元素下标合法,进行添加元素操作。

关于这一条我们会有两种情况

1、尾部插入

这种插入最为简单,直接插入到顺序表最后面就可以

2、中间插入

这个就稍微有点复杂了,首先我们得吧数组插入元素的位置空出来,因此我们需要把插入位置元素的位置以及后面元素统一向后移动一位,这样就腾出位置,然后插入元素

 

 

3、判断顺序表是否满了满了的话我们需要进行扩容

对于判断顺序表是否满了,我构建了一个布尔类型的返回方法,因此可以更好的在判断语句中利用它。对于扩容我们可以利用copyOf这个方法来实现对数组的扩容

4、实现代码如下:

 public boolean isFull() {return this.arrary.length == this.usedSize;}public void add(int pos,int date){if(pos <0||pos >this.usedSize){//判断是否在顺序表范围内System.out.println("pos不合法");return;}if(isFull()){//判断是否满了,满了的话扩容this.arrary = Arrays.copyOf(this.arrary,this.usedSize*2);}for(int i = this.usedSize - 1; i > pos; i--){this.arrary[i+1] = this.arrary[i];//从后往前落动}this.arrary[pos] = date;this.usedSize++;}

3、打印顺序表中的元素

打印顺序表中元素较为简单,因为我们已经知道了顺序表存储元素个数,因此for循环正常进行打印数组就可以

  public void display(){for (int i = 0; i < this.usedSize; i++){System.out.print(this.arrary[i]+" ");}System.out.println();}

4、判断顺序表中是否含有某个元素

这个直接遍历整个顺序表来查找元素即可,返回类型为布尔

   判定是否包含某个元素public boolean contains(int toFind) {for(int i = 0; i < this.usedSize ; i++){if(toFind == this.arrary[i]){return true;}}return false;}

5、查找顺序表中元素的下标

这个直接遍历整个顺序表来查找元素,并且返回下标值就可以,当找不到的时候我们返回-1

 // 查找某个元素对应的位置,找不到返回-1public int search(int toFind){for (int i = 0; i < this.usedSize; i++){if(toFind == this.arrary[i]){return i;}}return -1;}

6、更新顺序表对应下标的元素值

关于这个我们得判断两点:

1、判断对应下标是否越界或者不存在

2、判断顺序表是否为空

判断顺序表是否为空我构建了一个返回值为布尔类型的方法

  // 给 pos 位置的元素设为/更新 valuepublic void setPos(int pos, int value){if(pos < 0||pos > this.usedSize){System.out.println("pos下标越界");return;}if(ifEmp()){System.out.println("顺序表为空");return;}this.arrary[pos] = value;}

7、查找顺序表对应下标的元素值

这个也是老样子,先判断下标是否越界或者不存在,然后遍历返回值就可以了

// 获取 pos 位置的元素//判断是否越界//判断是否顺序表为空//直接返回下标元素public int getPos(int pos){if(pos < 0||pos > this.usedSize){System.out.println("pos下标越界");return -1;}if(ifEmp()){System.out.println("顺序表为空");return -1;}return this.arrary[pos];}

8、删除顺序表中的元素

删除元素其实和增加元素相反,如果删除元素在最后,直接删除即可但是如果删除元素在中间,其后面元素都要向前挪动一位

代码如下: 

   //删除第一次出现的关键字keypublic void remove(int toRemove){if(ifEmp()){System.out.println("顺序表为空");return;}if(-1 == search(toRemove)){System.out.println("不存在");return;}for(int i = search(toRemove); i < this.usedSize - 1; i++){this.arrary[i] = this.arrary[i+1];//左移}this.usedSize--;}

 9、获取顺序表的长度

 public int size() {return this.usedSize;}

返回代表有效长度 的值 usedSize 。 

10、清空顺序表

public void clear(){this.usedSize = 0;}

通过将 有效长度置为 0 来清空数组。

三、顺序表的缺点和优点总结 

1、顺序表的优点

顺序表的的优势体现在查找方面,只要给出对应的下标,则可以快速查找时间复杂度为O(1)。

2、顺序表的缺点

顺序表的缺点其实也很显而易见,他的缺点主要在于删除和增加,因为每个元素紧密相连,所以在删除和增加时不得不全部来移动整个数组,因此时间复杂度为O(n)。

这就是我们的顺序表的简单实现,我是小夏,我们下期链表再见!


http://chatgpt.dhexx.cn/article/N58OHK55.shtml

相关文章

创建一个顺序表

#include <stdio.h> #include <stdlib.h> #define Size 5 //对Size进行宏定义&#xff0c;表示顺序表申请空间的大小 typedef struct Table{ //定义个顺序表结构体 int * head;//声明了一个名为head的长度不确定的数组&#xff0c;也叫“动态数组”int length;//…

顺序表的插入和删除

前言 相信通过上一篇文章&#xff08;顺序表的定义&#xff09;大家已经能动手定义一个顺序表&#xff0c;并且知道顺序表如何进行初始化的工作。当完成一个顺序表的建立和初始化后&#xff0c;我们得到的会是一个空的顺序表&#xff08;空表&#xff09;&#xff0c;所以这篇…

数组和顺序表的区别

前言 看到很多人直接将顺序表等同于数组&#xff0c;认为顺序表就是数组&#xff0c;但这样做容易造成概念混淆。 下面就对这两个概念进行解释&#xff0c;帮助大家进行区分。 什么是顺序表 在解释什么是顺序表之前&#xff0c;我们还需要了解一点基础知识。 数据结构 数据…

数据结构之顺序表:顺序表的结构及基本操作

目录 一、数据结构1.1 算法与数据结构的区别 二、顺序表2.1 顺序表的基本形式【重点】2.2 顺序表的两种基本实现方式【重点】1、一体式结构&#xff1a;2、分离式结构: 2.3 元素存储区替换与扩充1. 元素存储区的替换2. 元素存储区的扩充 2.4 顺序表的操作1. 增加元素2. 删除元素…

简洁顺序表

目录 前言 一、初始准备 二、尾插尾删 三、头插尾删 四、随机位置插入删除 五、顺序表缺陷 六、全部代码 前言 顺序表和链表都是线性表 顺序表的本质就是数组&#xff0c;能够连续存储数据 一、初始准备 建立结构体 静态版本 由于静态版本容量是固定的&#xff0c…

~~顺序表~~

1.线性结构的特点是&#xff1a; 在数据元素的非空有限集中&#xff1a; (1).存在唯一的一个被称为“第一个”的数据元素 (2).存在唯一的一个被称为“最后一个”的数据元素 (3).除第一个之外&#xff0c;集合中的每个数据元素都只有一个前驱 (4).除第一个之外&#xff0c;…

顺序表的定义

1.顺序表的定义 顺序表——用顺序存储的方式实现线性表顺序存储 eg: A1-A2-A3-A4-A5 如果第一个位置是location(L)&#xff0c;那么第二个就是location(L)数据元素大小 [sizeof(ElemType)可以查看数据元素大小] 2.顺序表的实现——静态分配 #define MaxSize 10 //定义最大长…

C语言实现顺序表

c语言实现顺序表 线性表是最简单的数据结构&#xff0c;而顺序表又是最简单的线性表&#xff0c;其基本思想是用一段地址连续的储存单元依次存储线性表的数据元素&#xff0c;比如我们常用的一维数组&#xff0c;下面代码实现了顺序表的定义以及基本操作。 编译环境&#xff…

顺序表的实现

目录 1.顺序表的概念 2.静态顺序表 分析&#xff1a; 3.动态顺序表 分析&#xff1a; 4.顺序表初始化 5.顺序表尾部操作 5.1尾插 空间检查函数实现 分析&#xff1a; 5.2尾删 分析&#xff1a; 6.顺序表的头部操作 6.1头插 分析&#xff1a; 6.2头删 分析&…

【C语言】顺序表的创建

一、代码实现部分&#xff1a; 1、顺序表是线性表的基础部分&#xff0c;至于顺序表&#xff0c;在本人看来无异于数组。至于线性表的概念&#xff0c;在此不再赘述。接下来尝试利用C语言对线性表中的顺序表进行代码实现&#xff08;此程序中规定用户输入的数据类型为int类型&a…

顺序表和链表

1.今天给大家介绍线性表中两个常见的结构顺序表和链表&#xff0c;其中链表又包括单链表和带头双向循环链表。 2.此部分的全部代码放在个人gitee中 &#xff0c;需要的自行拿取&#xff0c;前后文件依次对应SeqList SList DList。gitee链接点这里 一、线性表 1.线性表 线性表&…

顺序表的增删查改

数据结构 是数据存储的方式&#xff0c;对于不同的数据我们要采用不同的数据结构。就像交通运输&#xff0c;选用什么交通工具取决于你要运输的是人还是货物&#xff0c;以及它们的数量。 顺序存储结构 包括顺序表、链表、栈和队列等。 例如腾讯QQ中的好友列表&#xff0c;…

顺序表初始化

文章目录 1. 顺序表2. 顺序表的初始化 1. 顺序表 顺序表(顺序存储结构) 存储数据时&#xff0c;会提前申请一整块足够大小的物理空间&#xff0c;然后将数据依次存储到一整块连续的存储空间内&#xff0c;存储时做到数据元素之间不留一丝缝隙。 使用顺序表存储集合 {1,2,3,4,…

顺序表的创建

三个朋友今天全部上岸大厂&#xff0c;祝贺。&#xff08;太羡慕了&#xff09; 静态分配创建一个顺序表&#xff1b; 1.顺序表的定义&#xff1a; #define MaxSize 10 typedef struct {ElemType data[MaxSize];int length; }SqlList;这里我们用结构体的方式定义以一个顺序表…

顺序表的详解

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串.... 即顺序表为线性表的一种&#xff0c; 顺序表是一种物理地址连续的存储单元依次存储数据元素的线性结构&#…

什么是顺序表

顺序表 在程序中&#xff0c;经常需要将一组&#xff08;通常是同为某个类型的&#xff09;数据元素作为整体管理和使用&#xff0c;需要创建这种元素组&#xff0c;用变量记录它们&#xff0c;传进传出函数等。一组数据中包含的元素个数可能发生变化&#xff08;可以增加或删…

数据结构——顺序表

目录 一. 什么是顺序表&#xff1f; 1&#xff0c;静态顺序表 2&#xff0c;动态顺序表 ①动态顺序表的实现及其初始化 ②空间的创建 ③顺序表的打印和销毁 ④顺序表的尾部插入和删除 ⑤顺序表的头部插入和删除 ⑥顺序表pos位置的插入和删除 ⑦顺序表指定元素的删除 二&am…

【数据结构】——顺序表介绍(独家介绍,小白必看!!)

重点和易错点都用彩笔标记出来了&#xff0c;放心食用&#xff01;&#xff01; 数据结构分为线性表和非线性表&#xff0c;今天我们要学习的顺序表就是线性表中的一个小类。那么&#xff0c;何为线性表&#xff0c;线性表是指n个具有相同性质的数据元素的有限序列&#xff0c…

顺序表详解

目录 一、线性表的概念 二、顺序表 1、顺序表的概念 1&#xff09;. 静态顺序表&#xff1a;使用定长数组存储元素。 2&#xff09;. 动态顺序表&#xff1a;使用动态开辟的数组存储。 三、接口实现 1、创建 2、初始化 3、扩容 4、尾插 5、打印 6、销毁 7、尾删 越界&…

php的strstr是什么意思,php strstr函数怎么用

strstr()函数是PHP中的一个内置函数&#xff0c;语法为strstr(string,search,before_search) &#xff0c;用于搜索字符串在另一字符串中是否存在&#xff0c;如果是&#xff0c;返回该字符串及剩余部分&#xff0c;否则返回 FALSE。此函数区分大小写。 php strstr()函数怎么用…