ホームページ  >  記事  >  Java  >  Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?

Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?

WBOY
WBOY転載
2023-04-21 14:31:081765ブラウズ

    まえがき

    線形リストは、同じ特性を持つ n 個のデータ要素の有限シーケンスです。線形テーブルは、実際に広く使用されているデータ構造です。一般的な線形テーブルは、シーケンス リスト、リンク リスト、スタック、キュー、文字列などです。線形テーブルは論理的に線形構造です。つまり、連続した直線です。ライン。ただし、物理的な構造は必ずしも連続しているわけではなく、線形テーブルを物理的に保存する場合、通常は配列や連結構造の形で保存されます。

    Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?

    1. シーケンス テーブル

    1.1 シーケンス テーブルとは

    シーケンス テーブルは、連続した物理アドレスを持つストレージ ユニットを使用して、データを順番に保存する 要素の線形構造は通常、配列に保存されます。アレイ上のデータの追加、削除、確認、変更を完了します。

    は実際には配列です。では、なぜシーケンス テーブルを作成する必要があるのでしょうか? 単純に配列を使用したほうが良いのではないでしょうか?違いは、クラス内で記述するとオブジェクト指向になる可能性があることです。

    シーケンス テーブルは一般に次のように分類できます。

    • 静的シーケンス テーブル: 固定長配列ストレージを使用します。

    • 動的シーケンステーブル: 動的にオープンされた配列ストレージを使用する

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

    静的シーケンス テーブルでは N が大きくなります。空きすぎても無駄ですし、空きすぎても不十分です。

    対照的に、動的シーケンス テーブルはより柔軟であり、空きスペースが大きくなります。必要に応じてサイズを動的に割り当てることができます。

    2. シーケンス テーブルの簡単な実装

    2.1 シーケンス テーブルの作成

    public class MyArrayList {
       public int[] elem;//数组
       public int usedSize;//数据的有效个数
     
       public MyArrayList(){
           this.elem = new int[10];
       }
    }

    Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?

    2.2 順序テーブルを出力します

    //打印顺序表
    public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }

    2.3 順序テーブルの長さを取得します

    //获取顺序表长度
        public int size(){
            return this.usedSize;
       }

    2.4 in pos位置に新しい要素を追加します

    順序テーブルに要素を挿入する場合、挿入位置は要素が保存されている場所の前になければなりません

    Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?

    //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }

    2.5 要素が含まれているかどうかを判断します

    //判断是否包含某个元素
    public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }

    2.6 要素に対応する位置を見つけます

    //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }

    2.7 pos 位置の要素を取得します

    //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }

    2.8 pos 位置にある要素を value に設定します

     //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }

    2.9 削除する要素を削除します

    //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            if(index == -1){
                System.out.println("没有你要删除的数字!");
                return;
            }
            for (int i = index; i < this.usedSize - 1; i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }

    2.10シーケンス リストをクリアします

    //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }

    3.MyArrayList.java

    import java.util.Arrays;
    
    public class MyArrayList {
    
        public int[] elem;
        public int usedSize;
    
        public MyArrayList(){
            this.elem = new int[10];
        }
        //打印顺序表
        public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }
        //获取顺序表长度
        public int size(){
            return this.usedSize;
        }
        //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }
    
        //判断是否包含某个元素
        public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }
        //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }
    
        //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }
        //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }
    
        //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            if(index == -1){
                System.out.println("没有你要删除的数字!");
                return;
            }
            for (int i = index; i < this.usedSize - 1; i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }
        //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }
    }

    4.Test.java

    public class Test {
        public static void main(String[] args) {
            MyArrayList myArrayList = new MyArrayList();
            myArrayList.add(0,1);
            myArrayList.add(1,2);
            myArrayList.add(2,3);
            myArrayList.add(3,4);
            myArrayList.add(4,5);
            myArrayList.display();
            System.out.println(myArrayList.contains(3));
            System.out.println(myArrayList.getPos(3));
            myArrayList.setPos(0,99);
            myArrayList.display();
        }
    }

    以上がJavaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。