面试题 7: 两个栈实现一个队列

来源:互联网 发布:好搜排名优化软件 编辑:程序博客网 时间:2024/06/05 16:52

一. 题目

用两个栈实现一个队列,并完成在队列尾部插入结点和在队列头部删除结点的功能.

代码请到我的代码库中下载 Point2Offer

二. 代码

package week_4;import java.util.Stack;/**难度系数:** * 剑指offer: 两个栈实现一个队列 * 方法: 队尾插入,队头删除 * 测试用例:功能测试(空的队列添加删除,非空的添加删除,连续删除置为空) * @author dingding * Date:2017-7-6 8:30 * Declaration: All Rights Reserved! */public class No7 {    public static void main(String[] args){        test1();    }    //定义一个队列    public static class CQueue<T>{        private  Stack<T> stack1= new Stack<>();        private  Stack<T> stack2= new Stack<>();        public CQueue(){        }        //solution,队头添加        private void appendTail(T number){            stack1.add(number);        }        //队尾删除        private  T deleteHead(){            //栈2为空,把栈1值取出放入2            if (stack2.isEmpty()) {                while (!stack1.isEmpty()){                    stack2.add(stack1.pop());                }            }            if (stack2.isEmpty()) {                throw new RuntimeException("No more element.");            }            return stack2.pop();        }    }    /*=======================测试用例==================*/    private static void test1(){        CQueue<Integer> cQueue = new CQueue<>();        for (int i=0;i<5;i++){            cQueue.appendTail(i);        }        Integer head = cQueue.deleteHead();        System.out.println("删除队头为: "+ head);        cQueue.appendTail(5);        System.out.print(" "+cQueue.deleteHead());        System.out.print(" "+cQueue.deleteHead());        System.out.print(" "+cQueue.deleteHead());        System.out.print(" "+cQueue.deleteHead());        System.out.print(" "+cQueue.deleteHead());    }}

有不妥当之处,麻烦告知:D

阅读全文
0 0