数据结构顺序表(三)

1. 顺序表接口实现与方法

1. 接口实现

public class SeqList {
    private int[] array;
    public static final int Current_Max=5; //当前数组元素最大值
    private  int UsedSize; //记录当前顺序表中有多少个有效的数据
    public SeqList() {
        this.array = new int[Current_Max];
    }
 
}

2. 方法 

//新增元素,默认在数组最后新增
    public void add(int data) { }
    // 在 pos 位置新增元素
    public void add(int pos, int data) { }
    // 判定是否包含某个元素
    public boolean contains(int toFind) { return true, }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) { return -1; }
    // 获取 pos 位置的元素
    public int get(int pos) { return -1; }
    // 给 pos 位置的元素设为 value
    public void set(int pos, int value){ }
    //删除第一次出现的关键字key
    public void remove(int toRemove){}
    // 获取顺序表长度
    public int size() { return 0; }
    // 清空顺序表
    public void clear() {}
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看试结果给出的
 
public void display(){}

2. 方法实现

2.1 在pos位置新增元素

!!注意!!

所插入的数据前面一定要存在元素,如示例56不可插入在4下标【不连续】

!!在数据结构中插入一个元素时,该元素一定要有前驱!!

当pos向已有元素的下标新增元素时,需要将原元素“挪开” 【挪开不是删除!】

 34的位置-->usedSize-1

    public void add(int pos,int data) {
        //判断位置是否合法,要符合顺序表的逻辑连续
        if(pos<0||pos>UsedSize){
            throw new PosOutBoundsException("pos位置不合法");
        }
        //判满
        if(isFull()){
            array= Arrays.copyOf(array,2*array.length);//扩容
        }
        //挪数据
      for(int i=UsedSize-1;i>=pos;i--)
      {
          array[i+1]=array[i];
      }
      //存数据
      array[pos]=data;
      UsedSize++;
    }

2.2 给pos位置元素设为value【更新】

   public void set(int pos,int value){
    if(!checkPos(pos)){
        throw new PosOutBoundsException("获取数据时,位置不合法!");
    }
    array[pos]=value;
    }
2.2.1判断pos是否合法
    private boolean checkPos(int pos){
        if(pos<0||pos>=UsedSize){
            return false;
        }
        return true;
    }

自定义报错

public class PosOutBoundsException extends RuntimeException {
    public PosOutBoundsException() {
    }

    public PosOutBoundsException(String message) {
        super(message);
    }
}

2.3 删除第一次出现的关键字key

    public void remove(int toRemove){
        if(isEmety()){
            return;
        }
        int index=indexOf(toRemove);//找到要删除的数据下标
        if(index==-1){
            return;
        }
        for(int i=index;i>UsedSize-1;i++){
            array[i]=array[i+1];
        }
        UsedSize--;
    }
2.3.1判空
 public boolean isEmety(){
       return UsedSize==0;
    }
2.3.2找到要删除的数据下标
    public int indexOf(int toFind){
        for(int i=0;i<SeqList.Current_Max;i++)
        {
            if(toFind==array[i]){
                return i;
            }
        }
        return -1;
    }

2.4 获取顺序表长度

    public int size(){
        return usedSize;
    }

2.5 清空顺序表

    public void clear(){
        UsedSize=0;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值