博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原)剑指offer之栈和队列
阅读量:5051 次
发布时间:2019-06-12

本文共 1858 字,大约阅读时间需要 6 分钟。

题目描述

用两个栈来实现一个队列,完成队列的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
stack1; stack
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;        }    }

 

转载于:https://www.cnblogs.com/code-changeworld/p/4542125.html

你可能感兴趣的文章
Spring Boot使用Druid和监控配置
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>