JAVAでコードでチェーンテーブル構造を実現
3396 ワード
まず,このチェーンテーブルチェーンテーブルは物理記憶ユニット上の非連続,非順序の記憶構造であり,データ要素の論理順序はチェーンテーブル中のポインタリンク順序によって実現されると簡単に説明する.チェーンテーブルは一連のノードによって(チェーンテーブル内の各要素をノードと呼ぶ)からなり、ノードは実行時に動的に生成することができる.各ノードは、データ要素を格納するデータドメインと、次のノードアドレスを格納するポインタドメインの2つの部分を含む.線形テーブルの順序構造に比べて複雑である.順序で格納する必要がないため、チェーンテーブルは挿入時にO(1)に達することができるの複雑さは、別の線形テーブル順序テーブルよりもはるかに速いが、1つのノードを検索したり、特定の番号のノードにアクセスしたりするにはO(n)の時間が必要であり、線形テーブルと順序テーブルに対応する時間複雑度はそれぞれO(logn)とO(1)である.チェーンテーブル構造を使用すると、配列チェーンテーブルが予めデータサイズを知る必要があるという欠点を克服することができ、チェーンテーブル構造はコンピュータのメモリ空間を十分に利用し、柔軟なメモリ動態管理を実現することができる.しかし,チェーンテーブルは配列ランダム読み出しの利点を失い,同時にチェーンテーブルはノードのポインタドメインを増加させるため,空間オーバーヘッドが大きい.チェーンテーブルの最も明らかな利点は、従来の配列が関連項目を配列する方法が、メモリまたはディスク上のこれらのデータ項目とは順序が異なり、データのアクセスが異なる配列順序で変換されることが多いことです.チェーンテーブルでは、テーブル上の任意の場所のノードの挿入と削除は許可されますが、ランダムアクセスは許可されません.チェーンテーブルには、一方向チェーンテーブル、双方向チェーンテーブル、ループチェーンテーブルなど、さまざまなタイプがあります.チェーンテーブルは、複数のプログラミング言語で実現できます.LispやSchemeのような言語の組み込みデータ型には,チェーンテーブルへのアクセスと操作が含まれている.C,C+,Javaなどのプログラム言語またはオブジェクト向け言語は,可変ツールによってチェーンテーブルを生成する.
コードはこれらの個人メールボックスです[email protected]ああ、技術問題を一緒に討論しましょう.
java :
public class MyList {
private class Node{
public Node pre;
public Node next;
public AnyType data;
public Node(AnyType d, Nodep, Node n){}
public Node(){}
}
private int theSize;
private Node Header;
private Node Tail;
public MyList(){}
public void add(AnyType item){}
public boolean isEmpty(){}
public int size(){}
public AnyType get( int idx){}
public void print(){}
}
/*Node , , , , , Node 。Data ,pre Node ,next Node 。 , :
View Code*/
public Node(AnyType d, Nodep, Node n){
this.data = d;
this.pre = p;
this.next = n;
}
public Node(){
this.data = null;
this.pre = null;
this.next = null;
}
/* :
View Code*/
public MyList(){
theSize = 0;
Header = new Node(null,null,null);
Tail = new Node(null,Header,null);
Header.next = Tail;
}
/* 、 , Next , pre 。 0。
, , :*/
//View Code
public void add(AnyType item){
Node aNode = new Node(item,null,null);
Tail.pre.next = aNode;
aNode.pre = Tail.pre;
aNode.next = Tail;
Tail.pre = aNode;
theSize++;
}
public boolean isEmpty(){
return ( theSize == 0);
}
public int size(){
return theSize;
}
public AnyType get( int idx){
if(idx > theSize-1 || idx < 0)
throw new IndexOutOfBoundsException();
Node current = new Node(null,Header,null);
for(int i = 0; i current = Header.next;
while(current.next != null){
// AnyType // ,
// toString ,
// print 。
System.out.println(current.data.toString());
current = current.next;
}
}
コードはこれらの個人メールボックスです[email protected]ああ、技術問題を一緒に討論しましょう.