首页后端开发其他后端知识Java顺序表是什么,怎样做增删查改的操作?

Java顺序表是什么,怎样做增删查改的操作?

时间2024-03-28 19:48:03发布访客分类其他后端知识浏览1183
导读:Java顺序表是什么,怎样做增删查改的操作?对于Java顺序表大家应该都能理解,顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表。我们要完成增删查改的操作,有一些方法是需要...

Java顺序表是什么,怎样做增删查改的操作?对于Java顺序表大家应该都能理解,顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表。我们要完成增删查改的操作,有一些方法是需要了解的。

什么是顺序表?它是一种什么结构?

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

顺序表分为:

静态顺序表:使用定长数组存储

动态顺序表:使用动态开辟的数组存储

静态顺序表适用于确定知道需要存多少数据的场景。

静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。

顺序表实现

首先得给定一个顺序表的长度,假如你要给列表插入元素,我们得先给0号位置插第一个数,如果0号位置没有数,我们不能直接插在1号位置或是更后边。如果0,1,2号位置都有数据,我们要往0号或1号位置插的话,这个时候得倒着遍历顺序表,让前边的数据往后挪一步。

增:

public class SepList {
    
    public int[] val;
    //定义数据
    public int size;
//存放一个数据则让size++;

    //构造方法  顺序表大小
    public SepList(){
    
        this.val = new int[5];

    }

    //也可以往进传大小
    public SepList(int ret){
    
        this.val = new int[ret];

    }


    //增加数据 得传要插入的位置与对应位置的数据 就比如0号位置插10
    public void addVal(int pos,int val){
    
        //首先判断顺序表是否满
        if(this.val.length == this.size) return;
    
        //其次得看看给的位置是否合法  pos不能小于0 也不能比如0号位置有数据 1号位置没有数据  然后插在2号或者更后边的位置
        if(pos  0 || pos >
     this.size) return;
    
        //如果0 1 2 3位置都有数据,要往1号位置插,得让后边的位置往后移一步
        for(int i = this.size;
     i >
    = pos;
 i--){
    
            this.val[i + 1] = this.val[i];

        }
    
        //此时在给定位置插数据
        this.val[pos] = val;
    
        this.size++;

    }


    //打印链表
    public void disPlay(){
    
        for(int i = 0;
     i  this.size;
 i++){
    
            System.out.print(this.val[i] + " ");

        }
    
        System.out.println();
//打印完后空行
    }


    public static void main(String[] args) {
    
        SepList myList = new SepList();
    //默认用5个元素
//        SepList myList = new SepList(10);
    //这时候顺序表的大小是10
        myList.addVal(0,10);
    //在0位置插入第一个数据
        myList.disPlay();
//打印

    }

}
    

//执行结果
10

如果要插入多个数据则调用方法即可

比如:

        myList.addVal(0,10);
    //第一次插入
        myList.addVal(1,20);
    
        myList.addVal(2,30);
    
        myList.addVal(3,40);
    
        myList.addVal(4,50);
    
        myList.disPlay();
    //打印
 
//执行结果
10 20 30 40 50

此时顺序表已满 如果再往进插入呢

        myList.addVal(0,10);
    //第一次插入
        myList.addVal(1,20);
    
        myList.addVal(2,30);
    
        myList.addVal(3,40);
    
        myList.addVal(4,50);
    
        myList.addVal(5,60);
    
        myList.addVal(6,70);
    
        myList.disPlay();
//打印

//执行结果
10 20 30 40 50

为啥还是原来的,也没有报错。是因为进入add函数在判断顺序表为满时,如果满了,直接跳出到打印函数。并不会报错。此时增函数就写好了。


  //判定链表是否包含某个元素
  public boolean contains(int toFind){
    
      for(int i = 0;
     i  this.size;
 i++){

          if(toFind == this.val[i]){
    
              return true;

          }

      }
    
      return false;

  }


  //查找某个元素对应的位置
  public int search(int toFind){
    
      for(int i = 0;
     i  this.size;
 i++){

          if(toFind == this.val[i]){
    
              return i;

          }

      }
    
      return -1;

  }


  //获取pos位置的数据
  public int getPos(int pos){
    
      //首先判断pos是否合法
      if(pos  0 || pos >
     this.size) return -1;
    
      for(int i = 0;
     i  this.size;
 i++){

          if(this.val[i] == this.val[pos]){
    
              return this.val[pos];

          }

      }
    
      return -1;

  }
    

//调用方法 在这没有粘贴主函数 你们一定要加上
      boolean flag1 = myList.contains(10);
    //判定元素
      boolean flag2 = myList.contains(60);
    
      System.out.println(flag1);
    
      System.out.println(flag2);
    
      int ret = myList.search(10);
    //查找
      int ret1 = myList.search(50);
    
      System.out.println(ret);
    
      System.out.println(ret1);
    
      int ret2 = myList.getPos(0);
    //获取pos位置数据
      int ret3 = myList.getPos(4);
    
      System.out.println(ret2);
    
      System.out.println(ret3);


//执行结果
true
false
0
4
10
50

直接找到pos位置对应的数据,将新数据赋给它就好了

 //修改pos位置的值
    public void remove(int pos,int val){
    
        if(pos  0 || pos >
 this.size){
    
            return;

        }
 else {
    
            this.val[pos] = val;

        }

    }
    

        myList.remove(2,3);
    //2号位置改为3
        myList.remove(3,4);
    //3号位置改为4
        myList.disPlay();
//打印

//执行结果
10 20 3 4 50

删除指定的数据后,后边的数据往前覆盖就可以了

 //删除元素
    public void delVal(int key){
    
        int i,j = 0;
    
        //找到该位置
        for(i = 0;
     i  this.size;
 i++){

            if(this.val[i] == key){
    
                j = i;
    
                break;

            }

        }
    
        //删除该位置数据,后边数据往前覆盖
        for(i = j;
     i  this.size - 1;
 i++){
    
            this.val[i] = this.val[i + 1];

        }
    
        this.size--;

    }
    

        myList.delVal(10);
    
        myList.delVal(50);
    
        myList.disPlay();
    //打印

//执行结果
20 30 40

关于Java顺序表及其实现增删查改的操作就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多Java顺序表的内容,大家可以关注网络其它的相关文章。

文本转载自PHP中文网

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Java顺序表是什么,怎样做增删查改的操作?
本文地址: https://pptw.com/jishu/655159.html
HTML中table设置行间距的方法是什么? Java基本数据类型有哪些,默认值和取值范围是怎样?

游客 回复需填写必要信息