Javaを使用してシーケンシャルテーブルデータ構造を実装するにはどうすればよいですか?
まえがき
線形リストは、同じ特性を持つ n 個のデータ要素の有限シーケンスです。線形テーブルは、実際に広く使用されているデータ構造です。一般的な線形テーブルは、シーケンス リスト、リンク リスト、スタック、キュー、文字列などです。線形テーブルは論理的に線形構造です。つまり、連続した直線です。ライン。ただし、物理的な構造は必ずしも連続しているわけではなく、線形テーブルを物理的に保存する場合、通常は配列や連結構造の形で保存されます。
1. シーケンス テーブル
1.1 シーケンス テーブルとは
シーケンス テーブルは、連続した物理アドレスを持つストレージ ユニットを使用して、データを順番に保存する 要素の線形構造は通常、配列に保存されます。アレイ上のデータの追加、削除、確認、変更を完了します。
は実際には配列です。では、なぜシーケンス テーブルを作成する必要があるのでしょうか? 単純に配列を使用したほうが良いのではないでしょうか?違いは、クラス内で記述するとオブジェクト指向になる可能性があることです。
シーケンス テーブルは一般に次のように分類できます。
静的シーケンス テーブル: 固定長配列ストレージを使用します。
動的シーケンステーブル: 動的にオープンされた配列ストレージを使用する
静的シーケンス テーブルは、保存する必要があるデータの量がわかっているシナリオに適しています。
静的シーケンス テーブルでは N が大きくなります。空きすぎても無駄ですし、空きすぎても不十分です。
対照的に、動的シーケンス テーブルはより柔軟であり、空きスペースが大きくなります。必要に応じてサイズを動的に割り当てることができます。
2. シーケンス テーブルの簡単な実装
2.1 シーケンス テーブルの作成
public class MyArrayList { public int[] elem;//数组 public int usedSize;//数据的有效个数 public MyArrayList(){ this.elem = new int[10]; } }
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位置に新しい要素を追加します
順序テーブルに要素を挿入する場合、挿入位置は要素が保存されている場所の前になければなりません
//在 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
