当前位置: 首页 > news >正文

免费网站建设一级免费单页网站建设

免费网站建设一级,免费单页网站建设,北京金企鹅网站建设方案,亚马逊网站联盟用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除…

用队列实现栈

题目描述

        请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]
解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

解题思路

栈是一种后进先出的数据结构,元素从顶端入栈,然后从顶端出栈。

队列是一种先进先出的数据结构,元素从后端入队,然后从前端出队。

        为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。可以使用两个队列实现栈的操作,其中queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列。

        入栈操作时,首先将元素入队到 queue2,然后将 queue1的全部元素依次出队并入队到 queue2,此时 queue2的前端的元素即为新入栈的元素,再将 queue1和 queue2互换,则 queue1的元素即为栈内的元素,queue1的前端和后端分别对应栈顶和栈底。

        由于每次入栈操作都确保 queue1的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除 queue1的前端元素并返回即可,获得栈顶元素操作只需要获得 queue1的前端元素并返回即可(不移除元素)。

        由于 queue1用于存储栈内的元素,判断栈是否为空时,只需要判断 queue1是否为空即可。 

复杂度分析

时间复杂度:入栈操作O(n),其余操作都是O(1),n是栈内的元素个数

空间复杂度:O(n),需要使用两个队列存储站内的元素

代码

#include <queue>
#include <array>
#include <iostream>
using namespace std;
class MyStack
{
public:queue<int> queue1;queue<int> queue2;/** 初始化栈. */MyStack(){}/** 向栈内添加元素. */void push(int x){queue2.push(x);while (!queue1.empty()){queue2.push(queue1.front());queue1.pop();}swap(queue1, queue2);}/** 移除栈顶元素 */int pop(){int r = queue1.front();queue1.pop();return r;}/** 返回栈顶元素. */int top(){int r = queue1.front();return r;}/** 返回栈是否为空. */bool empty(){return queue1.empty();}
};
int main()
{MyStack myStack;myStack.push(1);myStack.push(2);cout << myStack.top() << endl;  // 返回 2cout << myStack.pop() << endl;;   // 返回 2cout << myStack.empty() << endl; // 返回 False
}

用栈实现队列

题目描述

链接:简单232.用栈实现队列

        请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾代码
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你 只能 使用标准的栈操作 —— 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

解题思路

        将一个栈当作输入栈,用于压入 push传入的数据;另一个栈当作输出栈,用于 pop和 peek操作。每次 pop或 peek时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。

复杂度分析

时间复杂度:push和 emptyO(1),pop和 peek为均摊 O(1)。对于每个元素,至多入栈和出栈各两次,故均摊复杂度为 O(1)。

空间复杂度:O(n)。其中 n是操作总数。对于有 n次 push操作的情况,队列中会有 n个元素,故空间复杂度为 O(n)。

代码

#include <stack>
#include <iostream>
using namespace std;
class MyQueue
{
public:MyQueue(){}void push(int x){// 1.把s1所有元素弹出后依次放入s2while (!s1.empty()){s2.push(s1.top());s1.pop();}// 2.新元素加入到s2顶部s2.push(x);// 3.把s2所有元素弹出后依次放入s1while (!s2.empty()){s1.push(s2.top());s2.pop();}}int pop(){int ret = s1.top();s1.pop();return ret;}int peek(){return s1.top();}bool empty(){return s1.empty();}private:stack<int> s1;stack<int> s2;
};
int main()
{MyQueue myQueue;myQueue.push(1); // queue is: [1]myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)cout << myQueue.peek() << endl; // return 1cout << myQueue.pop() << endl; // return 1, queue is [2]cout << myQueue.empty() <<endl; // return false
}

http://www.yayakq.cn/news/404771/

相关文章:

  • 闸北建设机械网站麦进斗网站建设
  • 自动生成前端页面工具苏州优化件
  • 怎么接网站建设的单子...课程网站建设简介
  • 暴雪和网易终止合作网站制作产品优化
  • 工信部网站icp备案号dw如何做商业网站
  • 制作网站的步骤域名wordpress始终无法登录
  • 网站建设中的需求报告功能网站建设 定制
  • 怎样手机网站建设园林景观设计公司抖音推广
  • 怎么看网站开发语言是哪种wordpress 谷歌搜索
  • 工商网站查询个人信息网站js修改头像代码
  • 有高并发量门户网站开发经验wordpress加入题注
  • 深圳网站建设公司设计目前最好的网站建设企业
  • 2016网站设计百丽鞋业网站建设
  • 怎么用ajax做电商网站中山网站建设多少钱
  • 专业的营销型网站公司百度词条官网入口
  • 做网站租服务器多少钱天元建设集团有限公司赣榆分公司
  • 环境文化建设方案网站自己创免费网站
  • 明星静态网站网站后台 灰色
  • 临沂网站开发技术员百度怎么发广告
  • 营口网站开发广西网站建设智能优化
  • 为什么要学电商网站建设wordpress卡片式
  • 长安网站建设定制国外网站前台模板
  • 网站开发的框架网站规范化建设
  • 搭建企业官网哈尔滨seo优化运营
  • 综合性门户网站列举网站注册查询
  • 做国厂家的网站wordpress front-page.php
  • 网页游戏网站模压板网站怎么做页面解析跳转
  • 两学一做网站登录苏州室内设计学校
  • 创办网站公司wordpress萨隆
  • 做创意ppt网站南昌做网站的公司有哪些