兩個棧實現隊列+兩個隊列實現棧----java

一.兩個棧實現一個隊列java

思路:全部元素進stack1,而後所有出stack1並進入stack2.實現隊列的先進先出即:若stack2非空,咱們須要的剛好再棧頂,出棧;若要給隊列添加元素,即先進sack1,要出隊時,若stack2不爲空就出棧,爲空時就把stack1所有進棧到stack2code

import java.util.Stack;
 
/**
* Created by smyhvae on 2015/9/9.
*/
public class Queue {
 
private Stack<Integer> stack1 = new Stack<>();//執行入隊操做的棧
 private Stack<Integer> stack2 = new Stack<>();//執行出隊操做的棧
 
//方法:給隊列增長一個入隊的操做
 public void push(int data) {
  stack1.push(data);
 
}
 
//方法:給隊列正價一個出隊的操做
 public int pop() throws Exception {
 
if (stack2.empty()) {//stack1中的數據放到stack2以前,先要保證stack2裏面是空的(要麼一開始就是空的,要麼是stack2中的數據出完了),否則出隊的順序會亂的,這一點很容易忘
 
while (!stack1.empty()) {
    stack2.push(stack1.pop());//把stack1中的數據出棧,放到stack2中【核心代碼】
   }
 
}
 
if (stack2.empty()) { //stack2爲空時,有兩種可能:一、一開始,兩個棧的數據都是空的;二、stack2中的數據出完了
   throw new Exception("隊列爲空");
  }
 
return stack2.pop();
 }
 
public static void main(String[] args) throws Exception {
  Queue queue = new Queue();
  queue.push(1);
  queue.push(2);
  queue.push(3);
 
System.out.println(queue.pop());
 
queue.push(4);
 
System.out.println(queue.pop());
  System.out.println(queue.pop());
  System.out.println(queue.pop());
 
}
 
}

二.兩個隊列實現一個棧隊列

import java.util.ArrayDeque;
import java.util.Queue;
 
/**
* Created by smyhvae on 2015/9/9.
*/
public class Stack {
 
Queue<Integer> queue1 = new ArrayDeque<Integer>();
 Queue<Integer> queue2 = new ArrayDeque<Integer>();
 
//方法:入棧操做
 public void push(int data) {
  queue1.add(data);
 }
 
//方法:出棧操做
 public int pop() throws Exception {
  int data;
  if (queue1.size() == 0) {
   throw new Exception("棧爲空");
  }
 
while (queue1.size() != 0) {
   if (queue1.size() == 1) {
    data = queue1.poll();
    while (queue2.size() != 0) { //把queue2中的所有數據放到隊列一中
     queue1.add(queue2.poll());
     return data;
    }
   }
   queue2.add(queue1.poll());
  }
  throw new Exception("棧爲空");//不知道這一行的代碼是什麼意思
 }
 
public static void main(String[] args) throws Exception {
  Stack stack = new Stack();
 
stack.push(1);
  stack.push(2);
  stack.push(3);
 
System.out.println(stack.pop());
  System.out.println(stack.pop());
  stack.push(4);
 }
}
相關文章
相關標籤/搜索