チェーンスタック
リンクストレージ構造のスタックはチェーンスタックと呼ばれ、スタックは状況のフルスタックの不在をリンクすることが不可欠であるあなたが使用できない限り、何のメモリ空間を持っていません
リンクスタックは、実際には単一のリストの直線状であるが、それは唯一のスタック要素(リニアテーブルフッター)の上部から、私たちは、一本鎖、チェーンスタックのUMLクラス図を見ている、LinkedListのとLinkedStackは集約関係の集約関係でありますそれは、2つのクラス間の関係の関連付け、グローバル/ローカル代表の形態です。ローカルより概念的なレベルより高い全体の重合は、コンセプトに同じレベルに2つのクラスの関連を示唆していることを意味します。重合はまた、Javaでスコープのインスタンス変数に変換することができます。
次のようにLinkedStack LinkedListのは、メンバ変数であることを、その場合には、あなたがチェーン内のオブジェクトのリストLinkedListのスタックを作成することができ、実装LinkedStackコールリストは、当然のことながら、LinkedStackスタックは、インターフェース、特定のコードが実装できます。
package DS02.动态链表;
import DS01.动态数组.Stack;
import java.util.Iterator;
public class LinkedStack<E> implements Stack<E> {
//创建LinkedList对象
private LinkedList<E> list;
//获取有效元素个数
@Override
public int getSize() {
return list.getSize();
}
//判空
@Override
public boolean isEmpty() {
return list.isEmpty();
}
//入栈操作
@Override
public void push(E e) {
list.addFirst(e);
}
//出栈操作
@Override
public E pop() {
return list.removeFirst();
}
//获取栈顶元素
@Override
public E peek() {
return list.getFirst();
}
//清空链栈
@Override
public void clear() {
list.clear();
}
//迭代器
@Override
public Iterator<E> iterator() {
return list.iterator();
}
}
比較スタックのシーケンスおよびリンクスタック
それは、固定長を実装するスタック必要の順序を決定する、空間廃棄物の問題がある可能性があり、空間の性能のために、スタックリンクスタック内の同じ時間の複雑さ、両方のO(1)の配列を比較したが、アクセスが便利なポジショニング利点ですが、持っている必要があり、各要素のリンクスタックポインタフィールドを必要とするとき、同時にそれはメモリのいくつかのオーバーヘッドが追加されますが、長さがスタックに限定されるものではありません。だから、彼らとリニアテーブルディスカッションの違いなどがあります。
要素の使用時のスタックは、時には非常に小さな、時には非常に大規模な、予測不可能な変更された場合、それは制御可能な範囲で変更した場合、一方で、スタックは、より多くの推奨注文番号となり、リンクスタックを使用するのが最適です。