スタック構造のみでキュー構造を実装する方法


文書ディレクトリ
  • 一、テーマ
  • 二、解題構想
  • 三、コード実装(Java)
  • 一、テーマ
    スタック構造のみでキュー構造を実装する方法
    二、問題を解く構想
    スタック:先に入ってから出ます.
    キュー:先頭に進みます.
    2つのスタックを定義します:pushとpop.
    キューに入る:
  • 新しいデータが表示されるとpushスタックに押し込まれます.

  • アウトキュー:
  • pushスタックとpopスタックが空の場合、エラーが表示されます.
  • popスタックが空でpushスタックにデータがある場合、pushのすべてのデータをpopスタックに注ぎ込み、popスタックのスタックトップをポップアップし、戻り値として返します.
  • popスタックが空でない場合、popスタックのスタックトップをポップアップし、戻り値として返します.

  • キューの先頭に戻る:
  • はpopスタックのスタックトップ値(ポップアップされない)を返し、残りはアウトキュー操作と同じです.
  • 三、コード実装(Java)
    import java.util.Stack;
    
    	public class StackToQueue {
    		private Stack stackPush;
    		private Stack stackPop;
    
    		//      
    		public StackToQueue() {
    			stackPush = new Stack<>();
    			stackPop = new Stack<>();
    		}
    
    		//   
    		public void EnQueue(int obj) {
    			stackPush.push(obj);
    		}
    
    		//   
    		public int DeQueue() {
    			if (stackPush.empty() && stackPop.empty())
    				throw new Error("The Queue is empty!");
    			if (!stackPop.empty())
    				return stackPop.pop();
    			while (!stackPush.empty()) {
    				stackPop.push(stackPush.pop());
    			}
    			return stackPop.pop();
    		}
    
    		//     
    		public int peek() {
    			if (stackPush.empty() && stackPop.empty())
    				throw new Error("The Queue is empty!");
    			if (!stackPop.empty())
    				return stackPop.peek();
    			while (!stackPush.empty()) {
    				stackPop.push(stackPush.pop());
    			}
    			return stackPop.peek();
    		}
    	}