数据结构和算法

简介: 顺序表常用的一种,学习并了解显得十分重要,顺序表为以后的学习打下了基石。通过学习可以对顺序表有一定的掌握。

一.顺序的定义

顺序表示在计算机内存中以数组的形式保存的线性表,在内存中占用一组连续的存储

单元,在此中依次存储各个元素。

11.png

二.实现顺序表

3.1顺序表的API设计

10.png

3.2 顺序表的代码实现

定义一个泛型类(泛型类的好处就是可以接受任意类型9.png

在泛型类中定义成员变量

8.png

定义构造方法,用来给成员变量初始化


7.png

下面进行功能实现:

将线性表置为空表

6.png

判断线性表是否为空表

5.png

获取线性表的长度

4.png

获取i位置的元素

3.png

向线性表中添加元素t

2.png

在索引i处插入元素t1.png

插入示意图 :

微信图片_20220105110435.jpg

删除指定位置i处的元素,并返回该元素

12.png

返回元素t第一次出现的值

13.png

3.3完整的API概览:

//定义一个泛型类

public class SequenceList<T> {

   //定义一个存储元素的数组(先定义为泛型)

   private T[] eles;

   //定义一个变量表示顺序表中的元素个数

   private int N;

   //添加构造方法,用来初始化成员变量

   public SequenceList(int capacity) {//接受一个容量长度

       //初始化数组

       this.eles = (T[]) new Object[capacity];//创建的是Object类型的所以需要强转为T[]

       //初始化顺序表的长度

       this.N = 0;

   }

 

      // 将一个线性表置为空表

   public void clear(){

       //只需将顺序表的长度变为0即可

       this.N=0;

       //我们使用this的原因是:一定指的是成员变量,防止有局部变量和成员变量同名。

   }

 

   //判断当前线性表是否为空表

   public boolean isEmpty(){

       //是否为空只需要判断线性表中的元素个数

       return this.N==0;

   }

 

   //获取线性表的长度

   public int length(){

       //只需返回N即可

       return this.N;

   }

 

   //获取指定i位置的元素

   public T get(int i){

       //因为顺序表是一个数组,只需要通过索引找到该元素即可

       return eles[i];

   }

 

   //向线性表中添加元素t

   public void insert(T t){//T表示的元素的类型

       //这个表示非常的巧妙,将元素加1的同时又将索引N的位置赋值了元素

       eles[N++]=t;

       //这个表示等价于eles[N]=t;N++;

   }

 

   //在i元素初插入元素t

   public void insert(int i,T t){

       //先把i索引处的元素及其后面的元素依次向后移动一位

       for (int index=N;index>i;index--){

           //依次把前一位的值给后一位

           eles[index]=eles[index-1];

       }

       //再把t元素放到i索引处,数组长度加1

           N++;eles[i]=t;

   }

 

   //删除指定位置i处的元素,并返回该元素

   public T remove(int i){

       //先定义个一变量记录i位置的元素,后续用来返回该值

       T current=eles[i];

       //索引i后面元素依次向前移动一位

       for (int index=0;index<N-1;index++){

           //和前面的插入操作类似

           eles[index]=eles[index+1];

       }

       //元素个数减1,返回被覆盖的值

       N--;

       return current;

   }

 

   //查找元素t第一次出现的位置

   public int indexOf(T t){

       for (int i=0;i<N;i++){

           if(eles[i].equals(t)){

               return i;

           }

       }

       //for之后还没找到返回-1

       return -1;

   }

}

四、顺序表的测试:

14.png

目录
相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
25 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
30天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
19 0
数据结构与算法学习十四:常用排序算法总结和对比
|
1月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
29 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
1月前
|
机器学习/深度学习 存储 算法
【数据结构与算法基础】——算法复杂度
【数据结构与算法基础】——算法复杂度
|
1月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
1月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
19 0
|
1月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
16 0
|
1月前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
14 0

热门文章

最新文章