数据结构和算法

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

一.顺序的定义

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

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

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

目录
相关文章
|
2天前
|
机器学习/深度学习 存储 算法
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
8 1
|
5天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0
|
5天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
16 0
|
12天前
|
存储 机器学习/深度学习 算法
|
16天前
|
存储 算法 Python
程序设计的艺术:算法与数据结构的魅力
程序设计的艺术:算法与数据结构的魅力
8 0
|
16天前
|
存储 算法
数据结构开篇(普普通通浅浅聊数据结构)什么是数据结构 、什么是算法、重要性、如何学好数据结构呢
数据结构开篇(普普通通浅浅聊数据结构)什么是数据结构 、什么是算法、重要性、如何学好数据结构呢
|
24天前
|
存储 人工智能 算法
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
|
26天前
|
存储 算法 Serverless
数据结构期末复习(六)查找算法
数据结构期末复习(六)查找算法
11 0
|
26天前
|
存储 人工智能 算法
数据结构期末复习(1)数据结构和算法 线性表
数据结构期末复习(1)数据结构和算法 线性表
16 0
|
26天前
|
存储 算法 搜索推荐
浙江大学数据结构陈越 第一讲 数据结构和算法
浙江大学数据结构陈越 第一讲 数据结构和算法
48 1