zoukankan      html  css  js  c++  java
  • (原)剑指offer之栈和队列

    题目描述

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
    设两个栈为stack1,stack2;
    1:首先想到最简单的方法:是入栈时将数据压入stack1,出栈时将stack1中的元素出栈压入stack2,在将stack2栈顶元素弹出,再将stack2中的剩余元素重新压入stack1,
    这种方法很低效可想而知。
    2:改进一下:入栈时检查stack1,如果stack1为空则元素全在stack2中,所以将stack2中的元素压入stack1中(记得检查stack2是否为空),再将元素入栈,如果stack1不为空直接将元素压入栈,同样出栈时检查stack2,如果为空将stack1中的元素压入stack2再将栈顶元素出栈,如果不为空直接将栈顶元素出栈。
     
    方法2的c++代码实现:
     
     
    class Solution
    {
    public:
        void push(int node) {
            if (stack1.size() != 0) stack1.push(node);
            else{
                int n = (int)stack2.size();
                for (int i = 0; i < n; i++){
                    stack1.push(stack2.top());
                    stack2.pop();
                }
                stack1.push(node);
            }
        }
        
        int pop() {
            if (stack2.size() != 0) {
                int temp = stack2.top();
                stack2.pop();
                return temp;
            }
            else {
                int n = (int)stack1.size();
                for (int i = 0; i < n - 1; i++){
                    stack2.push(stack1.top());
                    stack1.pop();
                }
                int temp =stack1.top();
                stack1.pop();
                return temp;
            }
            
        }
        
        
    private:
        stack<int> stack1;
        stack<int> stack2;
    };

    在网上找到一种更高效的方法:入栈时直接将元素压入stack1,出栈时检查stack2,如果为空将stack1中的元素压入stack2,如果不为空直接将stack2栈顶元素出栈,很巧妙

    class Solution
    {
    public:
        void push(int node) {
            stack1.push(node);
        }
        
        int pop() {
            int temp;
            if (!stack2.empty()) {
                temp = stack2.top();
                stack2.pop();
                return temp;
            }
            else {
                int n = stack1.size();
                for (int i = 0; i < n; i++){
                    stack2.push(stack1.top());
                    stack1.pop();
                }
                temp = stack2.top();
                stack2.pop();
                return temp;
            }
        }
  • 相关阅读:
    Eclipse + Gradle + TestNG environment setup troubleshooting
    石家庄市教育局人才市场
    js技巧小记
    转 Browserhacks – 史上最全 CSS & JS Hack 手册
    【聊聊并发】【转】
    【深入理解Java内存模型】【转】
    Awk基本入门[1] Awk Syntax and Basic Commands
    Sed基本入门[6] Sed MultiLine Commands and loops
    Awk基本入门[2] Awk Builtin Variables
    SuperMap IS.NET 如何发布数据库型工作空间
  • 原文地址:https://www.cnblogs.com/code-changeworld/p/4542125.html
Copyright © 2011-2022 走看看