zoukankan      html  css  js  c++  java
  • P59、面试题7:用两个栈实现队列

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

    stack1专门用于插入数据,stack2专门用于删除数据,如果stack2没有数据了,则将stack1的数据转移到stack2中,直到两个栈都没有数据。 
    测试用例:
    1)往空的队列里添加、删除元素
    2)往非空的队列里添加、删除元素
    3)连续删除元素直到队列为空
     
    Queue类:
    package com.yyq;
    
    import java.util.Stack;
    
    /**
     * Created by Administrator on 2015/9/8.
     */
    public class Queue<T> {
        private T value;
        public static final Stack stack1 = new Stack();
        public static final Stack stack2 = new Stack();
        public T getValue() {
            return value;
        }
    
        public void setValue(T value) {
            this.value = value;
        }
    
        public Queue(){
        }
    
        public void appendTail(T value){
            stack1.push(value);
        }
    
        public T deleteHead(){
            T temp;
            if (stack2.size() <= 0){
                while(stack1.size() > 0){
                    temp = (T)stack1.pop();
                    stack2.push(temp);
                }
            }
            if (stack2.size() == 0){
                System.out.println("The Queue is empty!!");
            }
            return (T)stack2.pop();
        }
    }

    实现类:

    package com.yyq;
    
    /**
     * Created by Administrator on 2015/9/8.
     */
    public class QueueWithTwoStacks {
        void Test(char actual, char expected)
        {
            if(actual == expected)
                System.out.println("Test passed.
    ");
            else
                System.out.println("Test failed.
    ");
        }
    
        public static void main(String args[]){
            QueueWithTwoStacks queueWithTwoStacks = new QueueWithTwoStacks();
            Queue<Character> queue = new Queue<Character>();
            queue.appendTail('a');
            queue.appendTail('b');
            queue.appendTail('c');
            queue.appendTail('d');
            queue.appendTail('e');
            queue.appendTail('f');
    
            char head = queue.deleteHead();
            queueWithTwoStacks.Test(head, 'a');
    
            head = queue.deleteHead();
            queueWithTwoStacks.Test(head, 'b');
    
            queue.appendTail('g');
            head = queue.deleteHead();
            queueWithTwoStacks.Test(head, 'c');
    
            queue.appendTail('h');
            head = queue.deleteHead();
            queueWithTwoStacks.Test(head, 'd');
    
            head = queue.deleteHead();
            queueWithTwoStacks.Test(head, 'e');
        }
    }
     
    输出结果:
    Test passed.
     
    Test passed.
     
    Test passed.
     
    Test passed.
     
    Test passed.
     
    Process finished with exit code 0
  • 相关阅读:
    readAsDataURL(file) & readAsText(file, encoding)
    MySQL: Integer & String types
    JavaScript 中事件绑定的三种方式
    vue-router 导航守卫
    js 常见数组算法
    CSS渐变色边框,解决border设置渐变后,border-radius无效的问题
    margin:auto你真的理解么
    当margin和padding的值是百分比时,如何计算
    关于 js 函数参数的this
    Vue.js 中的 v-cloak 指令
  • 原文地址:https://www.cnblogs.com/yangyquin/p/4913492.html
Copyright © 2011-2022 走看看