剑指offer--面试题7:用两个栈实现队列--Java实现

来源:互联网 发布:wol网络唤醒 编辑:程序博客网 时间:2024/06/06 08:24

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

解题思路:
首先,栈的规则是先进后出,队列的规则是先进先出。经过两侧先进后出之后就变成了先进先出。所以,两次进栈出栈,便成了队列。

代码如下:

import java.util.Stack;public class CQueue<T> {    private Stack<T> stack1;    private Stack<T> stack2;    public CQueue(){        this.stack1 = new Stack<T>();        this.stack2 = new Stack<T>();    }    public void appendTail(T element){        stack1.push(element);    }    public T deleteTail() throws Exception{        if(stack2.size() <= 0){            //如果stack2为空,将stack1中的全部弹出,放入stack2中            while(stack1.size() > 0){                T data = stack1.pop();                stack2.push(data);            }        }        if(stack2.size() == 0){            throw new Exception("Queue is Empty");        }        T head = stack2.pop();        return head;    }    public boolean isEmpty(){        if(stack1.size() == 0 && stack2.size() == 0){            return true;        }        return false;    }    public static void main(String[] args) {        CQueue<Integer> queue = new CQueue<Integer>();        for(int i = 0; i < 10; i++){            queue.appendTail(i);        }        try {            while(!queue.isEmpty())            System.out.println(queue.deleteTail());        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击