数据结构和算法

一.顺序的定义

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

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

数据结构和算法

二.实现顺序表

3.1顺序表的API设计

数据结构和算法

3.2 顺序表的代码实现

定义一个泛型类(泛型类的好处就是可以接受任意类型数据结构和算法

在泛型类中定义成员变量

数据结构和算法

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


数据结构和算法

下面进行功能实现:

将线性表置为空表

数据结构和算法

判断线性表是否为空表

数据结构和算法

获取线性表的长度

数据结构和算法

获取i位置的元素

数据结构和算法

向线性表中添加元素t

数据结构和算法

在索引i处插入元素t数据结构和算法

插入示意图 :

数据结构和算法

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

数据结构和算法

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

数据结构和算法

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;

   }

}

四、顺序表的测试:

数据结构和算法

上一篇:win环境下,用虚拟化工具打包Qt动态编译exe的过程


下一篇:『C程序设计』读书笔记系列文章之第十二章 文件