您的位置:首页 > 编程语言 > Java开发

java使用两个栈模拟队列的实现

2016-03-21 13:40 513 查看

1.使用栈模拟队列

代码的实现借鉴上两篇博客中使用链表实现的栈

public class StackToQueue {

LinkStack s1 = new LinkStack();
LinkStack s2 = new LinkStack();

/*这里使用两个栈来模拟队列,s1主要负责入栈,s1栈顶存储的都是最近存储的元素,s2栈顶存储的是s1的栈低元素
* 所以每次入栈的时候要判断s1是否为空,如果s1不为空,则可以直接入栈,否则需要让s2出栈,出栈的元素依次
* 压如s1,出栈的时候相反,如果s2不为空,则直接出栈,否则需要把s1中的元素依次出栈,然后压入s2.
* */
void push(T data){
if(s1.top==null&& s2.top==null)
s1.push(data);
else if(s1.top!=null){
s1.push(data);
}else{
while(!s2.isEmpty())
s1.push(s2.pop());
}
}

T pop(){
if(s2.top==null){
while(!s1.isEmpty())
s2.push(s1.pop());
}
return s2.pop();
}

boolean isEmpty(){
if(s1.isEmpty() && s2.isEmpty())
return true;
else
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StackToQueue stackToQueue = new StackToQueue();
stackToQueue.push(1);
stackToQueue.push(11);
stackToQueue.push(111);
stackToQueue.push(1111);
stackToQueue.push(11111);
stackToQueue.push(111111);

while(!stackToQueue.isEmpty()){
System.out.println(stackToQueue.pop());
}

}

}


2.运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: