您的位置:首页 > 职场人生

【面试】用两个栈实现队列

2016-08-30 21:56 155 查看
一、描述

  用两个栈实现一个队列,队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别在队列尾部插入结点和队列头部删除结点的功能。 

class CQueue<T> {
private Stack<T> stack1;
private Stack<T> stack2;

public void appendTail(T node) {
}

public T deleteHead() {
}
}


二、解题思路

  队列的规则是先进先出,而栈的规则是后进先出,由于有两个栈,可以让元素进栈两次,就可以模拟出先进先出的效果。可以让一个队列存放元素,另一个队列作为中转队列。

三、代码

package com.hust.grid.leesf.chapter2;

import java.util.Stack;

/**
* Created by LEESF on 2016/8/29.
*/

class CQueue<T> {
private Stack<T> stack1;
private Stack<T> stack2;

public CQueue() {
stack1 = new Stack<T>();
stack2 = new Stack<T>();
}

public void appendTail(T node) {
stack1.push(node);
}

public T deleteHead() {
if (!stack2.isEmpty()) {
return stack2.pop();
}
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
if (!stack2.isEmpty())
return stack2.pop();
return null;
}
}

public class QueueWithTwoStacks {
public static void main(String[] args) {
CQueue<Integer> cQueue = new CQueue<Integer>();
cQueue.appendTail(1);
cQueue.appendTail(2);
cQueue.appendTail(3);
System.out.println(cQueue.deleteHead());
cQueue.appendTail(4);
System.out.println(cQueue.deleteHead());
System.out.println(cQueue.deleteHead());
System.out.println(cQueue.deleteHead());
}
}


  运行结果:

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