手書き双方向チェーンテーブルLinkedListのいくつかの一般的な機能
3791 ワード
実現する機能は以下の通りである:1)チェーンテーブルを作成する2)ノードを追加する(デフォルト追加と指定位置追加)3)あるノードにアクセスする4)ノードを削除する5)チェーンテーブルの長さの大きさを得る6)チェーンテーブルが空であるかどうかを判断する7)カスタムチェーンテーブルの印刷フォーマットをカスタマイズする8)チェーンテーブルを空にする
*注意:ノードの前進と後続を明らかにするには,削除時に付与の順序に注意する!!!
チェーンテーブルのノードのクラスノードの定義
いくつかの一般的な機能しか実現されず、自分で書いたものとツールパッケージのクラスを比較すると、そこからgetが多くなります.利益が多い~
*注意:ノードの前進と後続を明らかにするには,削除時に付与の順序に注意する!!!
チェーンテーブルのノードのクラスノードの定義
public class Node {
/**
*
*
*/
Object value;
/**
*
*/
Node pre;
/**
*
*/
Node next;
public Node(){
}
public Node(Object value, Node pre, Node next) {
this.value = value;
this.pre = pre;
this.next = next;
}
}
双方向チェーンテーブルLinkListを定義し、実現機能は以下の通りである./**
*
*
* @author min
*
*/
public class LinkList {
/**
*
*/
private Node head;
/**
*
*/
private Node tail;
private int size;
public LinkList() {
head = new Node();
tail = new Node();
head.next = tail;
tail.pre = head;
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size==0;
}
public void clear() {
head.next = tail;
tail.pre = head;
size = 0;
}
/**
*
*
* @param value
*/
public void add(Object value) {
Node node = new Node(value,tail.pre,tail);
tail.pre.next = node;
tail.pre = node;
size ++;
}
/**
*
* @param index
* @param value
*/
public void add(int index, Object value) {
checkLinkList(index);
if(index == size -1) {
//
add(value);
}
else{
Node x = node(index-1);
Node y = node(index);
Node node = new Node(value, x, y);
x.next = node;
y.pre = node;
size ++;
}
}
/**
*
* @param index
* @return
*/
public Object get(int index) {
//
checkLinkList(index);
//
return node(index).value;
}
/**
*
* @param index
* @return
*/
public Node remove(int index) {
checkLinkList(index);
Node x = node(index);
x.pre.next = x.next;
x.next.pre = x.pre;
size --;
return x;
}
/**
*
*
* @param index
*/
private void checkLinkList(int index) {
if(index > size() ||index < 0)
throw new ArrayIndexOutOfBoundsException(index);
}
/**
*
*
* @param index
* @return
*/
private Node node(int index) {
// 1
Node firstNode = head;
// 1
Node lastNode = tail;
//
if(index <=(size>>1) ) {
Node indexNode = firstNode;
for(int i = -1; i < index; i++)
indexNode = indexNode.next;
return indexNode;
}
//
else{
Node indexNode = lastNode;
for(int i = size; i>index; i--) {
indexNode = indexNode.pre;
}
return indexNode;
}
}
/**
*
*
*/
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
String str = "";
for(int i = 0; i
テストいくつかの一般的な機能しか実現されず、自分で書いたものとツールパッケージのクラスを比較すると、そこからgetが多くなります.利益が多い~