java简单实现顺序表

顺序表是什么?
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数
据的增删查改。

顺序表一般可以分为:

静态顺序表:使用定长数组存储。
动态顺序表:使用动态开辟的数组存储。
静态顺序表适用于确定知道需要存多少数据的场景.
静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.
相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.

简单看下代码

public class SeqList {
    int[] data = new int[10];
    private  int size = 0;
    //打印
    public void display(){
        for(int i = 0; i < size; i++){
            if(i == 0){
                System.out.print("[");
            }
            if(i < size - 1){
                System.out.print(data[i]+ ",");
            }
            else{
                System.out.print(data[i] +"]");
            }
        }
        System.out.println();
    }
//添加元素
    public void add(int pos, int elem) {
              if(size >= data.length){
                  realloc();
              }
              if (pos < 0 || pos > data.length) {
                  return;
              }
              if (pos == size) {
                  data[pos] = elem;
                  size++;
              } else {
                  for (int i = size - 1; i >= pos; i--) {
                      data[i + 1] = data[i];
                  }
                  data[pos] = elem;
                  size++;
              }
          }
          //增容
          public void realloc(){
        int[] arr = new int[data.length * 2];
        for(int i = 0; i < data.length; i++){
            arr[i] = data[i];
        }
        this.data = arr;
       }
       //查找某个元素位置
       public int search(int toFind) {
        for(int i = 0; i < size; i++){
            if(data[i] == toFind){
                return i;
            }
        }
        return -1;
    }
    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        int p = search(toFind);
        if(p != -1) {
            return true;
        }
        return false;
    }
    // 获取 pos 位置的元素
    public int getPos(int pos) {
        if(pos > 0 && pos < size){
            return data[pos];
        }
        return -1;
    }
    // 给 pos 位置的元素设为 value
    public void setPos(int pos, int value) {
        data[pos] = value;
    }
    //删除第一次出现的关键字key
    public void remove(int toRemove) {
        int num = search(toRemove);
        if(num == -1){
            return;
        }
        for(;num < size - 1; num++){
            data[num] = data[num + 1];
        }
        size--;
        System.out.println("删除成功");
    }
    //获取顺序表长度
    public int size() {
        return size;
    }
     清空顺序表
    public void clear() {
        data = new int[10];
        size = 0;
        System.out.println("清空完毕");
    }
    public static void main(String[] args) {
        //在另一个实验类中检验是否满足要求;
    }
}

检验代码是否满足要求可在另一个类中

public class Test {
    public static void main(String[] args) {
        SeqList List1 = new SeqList();
        //检验
        List1.add(0,1);
        List1.add(1,2);
        List1.add(2,3);
        List1.add(3,5);
        List1.add(2,1);
        List1.add(5,1);
        List1.add(6,100);
        List1.add(7,60);
        List1.add(8,9);
        List1.add(9,10);
        List1.add(3,2);
        List1.display();
        System.out.println(List1.search(100));
        System.out.println(List1.contains(40));
        System.out.println(List1.size());
        System.out.println(List1.getPos(5));
        List1.setPos(5,1001);
        List1.remove(2);
        List1.display();
    }
}

这个顺序表就是简单的动态存储,空间不够了自动扩容为原数组的2倍。
看一下注释就可以明白了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值