zoukankan      html  css  js  c++  java
  • queue,stack的相互实现

      Implement Queue using Stacks

    [抄题]:

    [思维问题]:

    [一句话思路]:

    取头部、取出来的时候,用一个output来倒序

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. this.queue = new LinkedList<Integer>(); queue的本质是链表,右边要写成linkedlist

    [总结]:

    [复杂度]:Time complexity: O() Space complexity: O()

    [英文数据结构,为什么不用别的数据结构]:

    [其他解法]:

    [Follow Up]:

    [题目变变变]:

    class MyQueue {
        Stack<Integer> input = new Stack();
        Stack<Integer> output = new Stack();
        
        public MyQueue() {
            this.input = new Stack<Integer>();
            this.output = new Stack<Integer>();
        }
        
        /** Push element x to the back of queue. */
        public void push(int x) {
            input.push(x);
        }
        
        /** Removes the element from in front of queue and returns that element. */
        public int pop() {
            peek();
            return output.pop();
        }
        
        /** Get the front element. */
        public int peek() {
            if (output.empty()) {
                while (!input.empty()) {
                    output.push(input.pop());
                }
            }
            return output.peek();
        }
        
        /** Returns whether the queue is empty. */
        public boolean empty() {
            if(output.empty() && input.empty()) {
                return true;
            }
            return false;
        }
    }
    View Code

    Implement Stack using Queues

    [抄题]:

    [思维问题]:

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. this.queue = new LinkedList<Integer>(); 右边是LinkedList
    2. Queue的push要先把新元素加进去。不然怎么去挤谁呢……
    3. queue的操作语言是poll, add。stack是push/pop
    4. 判断空都写isempty

    [二刷]:

    1. 取top时要用peek方法,直接用poll取出来的不一定是最大的
    2. 一开始只需要初始化数据结构,不需要新建对象:Queue<Integer> queue;

    [总结]:

    [复杂度]:Time complexity: O() Space complexity: O()

    [英文数据结构,为什么不用别的数据结构]:

    [其他解法]:

    [Follow Up]:

    [题目变变变]:

    class MyStack {
        Queue<Integer> queue;
        /** Initialize your data structure here. */
        public MyStack() {
            this.queue = new LinkedList<Integer>();
        }
        
        /** Push element x onto stack. */
        public void push(int x) {
            queue.add(x);
            for (int i = 0; i < queue.size() - 1; i++) {
                queue.add(queue.poll());
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        public int pop() {
            return queue.poll();
        }
        
        /** Get the top element. */
        public int top() {
            return queue.peek();
        }
        
        /** Returns whether the stack is empty. */
        public boolean empty() {
            if (queue.isEmpty()) {
                return true;
            }
            return false;
        }
    }
    View Code
  • 相关阅读:
    [译]The multi Interface
    [译]libcurl_tutorial
    [译]curl_multi_perform
    [译]curl_multi_info_read
    [译]libcurl错误码
    YumRepo Error: All mirror URLs are not using ftp, http[s] or file
    linux 修改文件用户组和所有者
    linux禁止root用户直接登录sshd并修改默认端口
    修改root登录用户名减少阿里云Linux主机“被暴力破解”警告
    CentOS云主机安全之新增ssh登录账户、禁止ROOT登陆
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8267561.html
Copyright © 2011-2022 走看看