溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java實(shí)現(xiàn)順序表增刪查改的方法

發(fā)布時(shí)間:2021-01-11 11:47:09 來(lái)源:億速云 閱讀:256 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)java實(shí)現(xiàn)順序表增刪查改的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

什么是順序表?它是一種什么結(jié)構(gòu)?

順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。在數(shù)組上完成數(shù)據(jù)的增刪查改。

順序表分為:

靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)
動(dòng)態(tài)順序表:使用動(dòng)態(tài)開辟的數(shù)組存儲(chǔ)

靜態(tài)順序表適用于確定知道需要存多少數(shù)據(jù)的場(chǎng)景。

靜態(tài)順序表的定長(zhǎng)數(shù)組導(dǎo)致N定大了,空間開多了浪費(fèi),開少了不夠用。

順序表實(shí)現(xiàn)

首先得給定一個(gè)順序表的長(zhǎng)度,假如你要給列表插入元素,我們得先給0號(hào)位置插第一個(gè)數(shù),如果0號(hào)位置沒(méi)有數(shù),我們不能直接插在1號(hào)位置或是更后邊。如果0,1,2號(hào)位置都有數(shù)據(jù),我們要往0號(hào)或1號(hào)位置插的話,這個(gè)時(shí)候得倒著遍歷順序表,讓前邊的數(shù)據(jù)往后挪一步。

java實(shí)現(xiàn)順序表增刪查改的方法

增:

public class SepList {
    public int[] val;//定義數(shù)據(jù)
    public int size;//存放一個(gè)數(shù)據(jù)則讓size++;

    //構(gòu)造方法  順序表大小
    public SepList(){
        this.val = new int[5];
    }
    //也可以往進(jìn)傳大小
    public SepList(int ret){
        this.val = new int[ret];
    }

    //增加數(shù)據(jù) 得傳要插入的位置與對(duì)應(yīng)位置的數(shù)據(jù) 就比如0號(hào)位置插10
    public void addVal(int pos,int val){
        //首先判斷順序表是否滿
        if(this.val.length == this.size) return;
        //其次得看看給的位置是否合法  pos不能小于0 也不能比如0號(hào)位置有數(shù)據(jù) 1號(hào)位置沒(méi)有數(shù)據(jù)  然后插在2號(hào)或者更后邊的位置
        if(pos < 0 || pos > this.size) return;
        //如果0 1 2 3位置都有數(shù)據(jù),要往1號(hào)位置插,得讓后邊的位置往后移一步
        for(int i = this.size; i >= pos; i--){
            this.val[i + 1] = this.val[i];
        }
        //此時(shí)在給定位置插數(shù)據(jù)
        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();//默認(rèn)用5個(gè)元素
//        SepList myList = new SepList(10);//這時(shí)候順序表的大小是10
        myList.addVal(0,10);//在0位置插入第一個(gè)數(shù)據(jù)
        myList.disPlay();//打印

    }
}

//執(zhí)行結(jié)果
10

如果要插入多個(gè)數(shù)據(jù)則調(diào)用方法即可
比如:

        myList.addVal(0,10);//第一次插入
        myList.addVal(1,20);
        myList.addVal(2,30);
        myList.addVal(3,40);
        myList.addVal(4,50);
        myList.disPlay();//打印
 
//執(zhí)行結(jié)果
10 20 30 40 50

此時(shí)順序表已滿 如果再往進(jìn)插入呢

        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();//打印

//執(zhí)行結(jié)果
10 20 30 40 50

為啥還是原來(lái)的,也沒(méi)有報(bào)錯(cuò)。是因?yàn)檫M(jìn)入add函數(shù)在判斷順序表為滿時(shí),如果滿了,直接跳出到打印函數(shù)。并不會(huì)報(bào)錯(cuò)。此時(shí)增函數(shù)就寫好了。

java實(shí)現(xiàn)順序表增刪查改的方法

  //判定鏈表是否包含某個(gè)元素
  public boolean contains(int toFind){
      for(int i = 0; i < this.size; i++){
          if(toFind == this.val[i]){
              return true;
          }
      }
      return false;
  }

  //查找某個(gè)元素對(duì)應(yīng)的位置
  public int search(int toFind){
      for(int i = 0; i < this.size; i++){
          if(toFind == this.val[i]){
              return i;
          }
      }
      return -1;
  }

  //獲取pos位置的數(shù)據(jù)
  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;
  }

//調(diào)用方法 在這沒(méi)有粘貼主函數(shù) 你們一定要加上
      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位置數(shù)據(jù)
      int ret3 = myList.getPos(4);
      System.out.println(ret2);
      System.out.println(ret3);

//執(zhí)行結(jié)果
true
false
0
4
10
50

直接找到pos位置對(duì)應(yīng)的數(shù)據(jù),將新數(shù)據(jù)賦給它就好了

java實(shí)現(xiàn)順序表增刪查改的方法

 //修改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號(hào)位置改為3
        myList.remove(3,4);//3號(hào)位置改為4
        myList.disPlay();//打印

//執(zhí)行結(jié)果
10 20 3 4 50

刪除指定的數(shù)據(jù)后,后邊的數(shù)據(jù)往前覆蓋就可以了

java實(shí)現(xiàn)順序表增刪查改的方法

 //刪除元素
    public void delVal(int key){
        int i,j = 0;
        //找到該位置
        for(i = 0; i < this.size; i++){
            if(this.val[i] == key){
                j = i;
                break;
            }
        }
        //刪除該位置數(shù)據(jù),后邊數(shù)據(jù)往前覆蓋
        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();//打印

//執(zhí)行結(jié)果
20 30 40

感謝各位的閱讀!關(guān)于“java實(shí)現(xiàn)順序表增刪查改的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI