郓城住房和城乡建设局网站,网站首页介绍,基金网站开发,优秀的网站有哪些内容转载自 漫画#xff1a;如何用栈实现队列
栈的特点是先入后出#xff0c;出入元素都是在同一端#xff08;栈顶#xff09;#xff1a;
入栈#xff1a; 出栈#xff1a; 队列的特点是先入先出#xff0c;出入元素是在不同的两端#xff08;队头和队尾#xff09;…转载自 漫画如何用栈实现队列
栈的特点是先入后出出入元素都是在同一端栈顶
入栈 出栈 队列的特点是先入先出出入元素是在不同的两端队头和队尾
入队 出队 既然我们拥有两个栈那么我们可以让其中一个栈作为队列的入口负责插入新元素另一个栈作为队列的出口负责移除老元素。 队列的主要操作无非有两个入队和出队。
在模拟入队操作时每一个新元素都被压入到栈A当中。
让元素1 “入队” 让元素2 “入队” 让元素3 “入队” 这时候我们希望最先“入队”的元素1“出队”需要怎么做呢
让栈A中的所有元素按顺序出栈再按照出栈顺序压入栈B。这样一来元素从栈A弹出并压入栈B的顺序是3,2,1和当初进入栈A的顺序1,2,3是相反的 此时让元素1 “出队”也就是让元素1从栈B弹出 让元素2 “出队” 让元素4 “入队” 此时的出队操作仍然从栈B弹出元素。
让元素3 “出队” 让元素4 “出队” private StackInteger stackA new StackInteger();
private StackInteger stackB new StackInteger();/**
* 入队操作
* param element 入队的元素
*/
public void enQueue(int element) {stackA.push(element);
}/**
* 出队操作
*/
public Integer deQueue() {if(stackB.isEmpty()){if(stackA.isEmpty()){return null;}transfer();}return stackB.pop();
}/**
* 栈A元素转移到栈B
*/
private void transfer(){while (!stackA.isEmpty()){stackB.push(stackA.pop());}
}public static void main(String[] args) throws Exception {StackQueue stackQueue new StackQueue();stackQueue.enQueue(1);stackQueue.enQueue(2);stackQueue.enQueue(3);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());stackQueue.enQueue(4);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());}