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()); } } }