1.問題の説明
1.2つのスタックを持つキューを実装します。キューの宣言は次のとおりです。キューの最後に整数を挿入し、キューの先頭に整数を削除する機能をそれぞれ完了する2つの関数appendTailとdeleteHeadを実装してください。(キューに要素がない場合、deleteHead操作は-1を返します)
二、解決策
1.スタックはスタックを格納するために使用されます
2.スタックはスタックから保存するために使用されます
3、具体操作
A:構築メソッド
stackInとstackOutを空に初期化します
B:要素を挿入
要素を挿入する対応するメソッドappendTailstackIn
直接要素を挿入する
C:要素を削除します
メソッドdeleteHeadに対応する要素を削除します
stackOutが空の場合は、stackIn内のすべての要素をポップして、stackOutに挿入します
。stackOutがまだ空の場合は、-1を返します。それ以外の場合は、stackOutから要素をポップアウトして、
三、コード
package com.haoxiansheng.demo01.SwordfingerOffer;
import lombok.extern.slf4j.Slf4j;
import java.util.Stack;
/**
* @author flame
* @data 2020/10/21
*/
@Slf4j
public class CQueue {
private Stack<Integer> stackIn;
private Stack<Integer> stackOut;
public CQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public static void main(String[] args) {
CQueue queue = new CQueue();
queue.appendTail(8);
queue.appendTail(9);
queue.appendTail(10);
log.info("pop=>{}", queue.deleteHead());
log.info("pop=>{}", queue.deleteHead());
log.info("pop=>{}", queue.deleteHead());
log.info("pop=>{}", queue.deleteHead());
}
/**
* 入队
* @param value
*/
public void appendTail(int value) {
stackIn.push(value);
}
/**
* 出队
* @return
*/
public int deleteHead() {
if (!stackOut.isEmpty()) {
return stackOut.pop();
} else {
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
return stackOut.isEmpty() ? -1 : stackOut.pop();
}
}