Java データ構造のゲート - シーケンス テーブル

目次

リニアテーブル

順次ストレージ:

チェーンストレージ:

シーケンステーブル

シーケンステーブルのシミュレーション実装

新しい要素

要素の削除

要素を変更する

要素の検索

シーケンステーブルの長さを取得する

シーケンステーブルをクリアする


リニアテーブル

同じ特性を持つデータ要素の有限シーケンスは線形リストと呼ばれ、配列も線形リストの一種です。

一般的な線形テーブルには、シーケンシャル リスト、リンク リスト、スタック、キューなどがあります。

線形テーブルは論理的には直線、つまり線形構造と考えることができますが、線形テーブルを使用する場合、必ずしも直線上にあるとは限りません。つまり、線形テーブルの物理構造は必ずしも直線上にあるわけではありません。継続的な。

線形構造には、シーケンシャル ストレージとチェーン ストレージという 2 つの保存方法があります。通常、配列およびチェーン構造の形式で保存されます。

順次ストレージ:

論理的には連続する直線であり、物理的にも連続する直線です。

 

 

チェーンストレージ:

論理的には直線ですが、物理構造は連続的に保存されません。

 

シーケンステーブル

シーケンステーブルは線形テーブルの一種で、アドレスが連続した空間を利用してデータを格納する線形構造です。

配列の定義に少し似ていますか? はい、シーケンス テーブルは配列を使用してデータの追加、削除、変更、チェックを行います。

 

シーケンステーブルのシミュレーション実装

class Onder{
    public int[] elem;  //数组 实现顺序表
    public int useSize;  //有效元素的个数
    public static final int DEFAULT_UseSize = 5; 
    public onder() {
        this.elem = new int[DEFAULT_UseSize];
    }
}

Onder のパラメーターなしのコンストラクターを呼び出すと、システムは 5 つの int を格納できるデータ スペースを構築します。

つまり、シーケンス テーブルの基礎となる容量を DEFAULT_UseSize に設定します。

新しい要素

現在のシーケンス テーブルにはデータがないため、現時点ではシーケンス テーブルに要素を追加する必要があります。

シーケンス リストの最後に要素を追加します。

/**
     * 判断顺序表是否已满
     * @return
     */
    public boolean IsFull() {
        return this.elem.length == this.useSize;
    }
    /**
     * 在顺序表的最后新增元素
     * @param val
     */
    public void add(int val) {
        //先判断整个顺序表是否已满,如果已满,则需对顺序表进行扩容
        if(IsFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        this.elem[useSize++] = val;
    }

位置 pos に要素を追加します。

/**
     * 检查pos位置是否合法
     * @param pos
     * @return
     */
    public boolean index(int pos) {
        return pos >= 0 && pos < this.useSize;
    }
    /**
     * 在pos位置新增元素
     * @param pos
     * @param val
     */
    public void add(int pos,int val) {
        //先判断整个顺序表是否已满,如果已满,则需对顺序表进行扩容
        if(IsFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        //再判断pos位置是否合法
        if(index(pos)) {
            for (int i = this.elem.length-1; i > pos; i--) {
                this.elem[i] = this.elem[i-1];
            }
            this.elem[pos] = val;
            this.useSize++;

        } else {
            System.out.println("pos位置不合法,请检查合法性");
        }

    }

要素の削除

最初に出現したキーワード キーを削除します

/**
     * 删除第一次出现的关键字key
     * @param key
     */
    public void remove(int key) {
        for (int i = 0; i < this.useSize-1; i++) {
            if(this.elem[i] == key) {
                for (int j = i; j < this.useSize-1; j++) {
                    this.elem[j] = this.elem[j+1];
                }
                this.useSize--;
                this.elem[useSize] = 0;   //最后一个元素置为0
                return;
            }
        }
        System.out.println("没有你要删除的关键字");
    }

要素を変更します:

位置 pos の要素を val に変更します

    /**
     * 将pos位置的值改为val
     * @param pos
     * @param val
     */
    public void set(int pos,int val) {
        if(pos>=0 && pos< this.useSize) {
            this.elem[pos] = val;
            return;
        }
        System.out.println("pos位置不合法");
    }

 要素の検索:

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

    /**
     * 查找某个元素对应的位置
     * @param val
     * @return
     */
    public int indexOf(int val) {
        for (int i = 0; i < this.useSize-1; i++) {
            if(this.elem[i] == val) {
                return i;
            }
        }
        return -1;
    }

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

    /**
     * 获取pos位置的值
     * @param pos
     * @return
     */
    public int get(int pos) {
        if(pos>=0 && pos< this.useSize) {
            return this.elem[pos];
        }
        return -1;
    }

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

    /**
     * 判断是否包含某个元素的值
     * @param val
     * @return
     */
    public boolean contains(int val) {
        for (int i = 0; i < this.useSize-1; i++) {
            if(this.elem[i] == val) {
                return true;
            }
        }
        return false;
    }

シーケンステーブルの長さを取得する

    /**
     * 获取顺序表的长度
     * @return
     */
    public int size() {
        return this.useSize;
    }

シーケンステーブルをクリアする

    /**
     * 清空顺序表
     */
    public void clear() {
        this.useSize = 0;  //如果顺序表中存放的是引用类型,则需要将每一个元素全部置为null
    }

おすすめ

転載: blog.csdn.net/qq_63525426/article/details/128679769
おすすめ