記事のディレクトリ
タイトル説明
以下のスタックを使用してキューの実装:
- プッシュ(X) - スタック元素X
- ポップ() - トップ要素を削除します
- トップは() - トップ要素を取得します。
- 空() - スタックが空であるかどうかを返します
説明:
- サイズ、正面からポップ/ PEEK、バックにプッシュされ、これらの操作の空で法的です - あなただけのキューの基本的な操作を使用することができます。
- 使用している言語は、キューをサポートしていないかもしれません。あなたは長い間、標準の操作などとしてキュー、キューをシミュレートするために、リストまたは両端キュー(両端キュー)を使用することができます。
- あなたはすべての操作は、(例えば、空のスタックにポップ操作やトップを呼び出すことはありません)有効であることを仮定してもよいです。
問題の解決策
アナログとLINKLIST共通機能(ジャワ)
アイデア:
主キーは、キューとスタックの特徴によればLinkedListの一般的に使用される機能を習得することで、機能のその組み合わせ。
クラスLinkedListのポータル
主に細部に反映されpush()
ますが、スタックに値を入力するときにプッシュする必要があるとき、:
- LINKLISTは尾に価値を置きます
- ヘッドノード(オフ
queue.remove()
尾上) - サイクルの第2ステップ(
队列长度-1
)時間 - ノードを行った後、新たに追加されたノードの先頭になります。
これは、毎回新たな要素がリオーダスタックするために添加されるように行われます。上部後ポップ有するpoll()
とpeek()
頭部またはビューへの出力ノード。
class MyStack {
Queue<Integer> queue;
public MyStack() {
queue = new LinkedList<>();
}
public void push(int x) {
queue.add(x);
for(int i = 1; i < queue.size(); i++)
queue.add(queue.remove());
}
public int pop() {
return queue.poll();
}
public int top() {
return queue.peek();
}
public boolean empty() {
return queue.size() == 0;
}
}