Java 使用棧實現簡單隊列功能
前兩天面試奇安信,有問到如果通過棧實現隊列,當時沒有回答清楚,現在記錄一下。
通過A,B兩個棧,一個作爲入棧,一個作爲出棧。當有數據入列時將數據放入A棧,如果需要出列,則調用B棧進行出棧。
具體實現方案
- 當有數據入隊時,使用A棧進行入棧,並判斷B棧是否爲空,如果爲空則將A棧的數據轉移至B棧
- 當出棧時,判斷B棧是否存在數據,如果存在直接彈出,否則轉移數據
注意:一定是要在B棧爲空時進行轉移,否則會導致順序錯亂
public class StackQuene {
//用於入棧
private Stack<Integer> statckPush;
// 用於出棧
private Stack<Integer> stackPop;
public StackQuene(){
stackPop = new Stack<>();
statckPush = new Stack<>();
}
public int poll(){
if(stackPop.empty()){
// 當出棧中沒有數據,則進行轉移
transferStack();
}
if(stackPop.empty()){
// 數據轉移後依然沒有數據
return -1;
}
return stackPop.pop();
}
public void add(int num){
statckPush.push(num);
// 如果出棧爲空,則進行轉移
if(stackPop.empty()){
transferStack();
}
}
/**
* 將入棧數據轉入到出棧
*/
public void transferStack(){
while (!statckPush.empty()){
stackPop.push(statckPush.pop());
}
}
}