ホームページ > Java > &#&はじめる > Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

王林
リリース: 2021-01-11 09:43:35
転載
3261 人が閲覧しました

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

シーケンス テーブルとは何ですか?どのような構造になっているのでしょうか?

シーケンステーブルは、連続した物理アドレスを持つストレージユニットのセグメントに順番に格納される線形構造であり、一般的にはアレイストレージが使用されます。アレイ上のデータの追加、削除、確認、変更を完了します。

(学習ビデオ共有: java ビデオ チュートリアル)

シーケンス テーブルは次のように分かれています:

静的シーケンス テーブル: 固定長配列ストレージを使用します。
動的シーケンス テーブル: 動的にオープンされた配列ストレージを使用する

静的シーケンス テーブルは、保存する必要があるデータ量がわかっているシナリオに適しています。

静的シーケンステーブルの固定長配列ではNが固定的に大きくなり、空きすぎると無駄になりますし、空きすぎると足りなくなります。

シーケンシャル テーブルの実装

まず、シーケンス テーブルの長さを指定する必要があります。リストに要素を挿入したい場合は、まず最初の数値を位置 0 に挿入する必要があります。位置が 0 の場合、カウントしないと、位置 1 以降に直接挿入することはできません。位置 0、1、および 2 にデータがあり、それを位置 0 または 1 に挿入したい場合は、シーケンス テーブルを逆方向​​に走査して、前のデータを 1 つ前に移動する必要があります。

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

追加:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

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

ログイン後にコピー

複数のデータを挿入する場合は、メソッドを呼び出すだけです。
例:

1

2

3

4

5

6

7

8

9

        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

ログイン後にコピー

この時点での注文 テーブルがいっぱいでさらに挿入したらどうなりますか?

1

2

3

4

5

6

7

8

9

10

11

        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 関数に入った時点で順序表がいっぱいであると判断し、いっぱいの場合は直接 print 関数にジャンプするためです。エラーは報告されません。この時点で、インクリメント関数が記述されます。

Check

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

  //判定链表是否包含某个元素

  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

ログイン後にコピー

Change

pos 位置に対応するデータを直接検索し、新しいデータを割り当てます大丈夫です

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//修改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

ログイン後にコピー

削除

指定されたデータを削除した後、後続のデータを上書きするだけです

Javaによるシーケンステーブルの追加、削除、問い合わせ、変更を実現

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//删除元素

    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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート