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

方维制网站哈尔滨门户网站建设

方维制网站,哈尔滨门户网站建设,制作简单的网页,cn域名多少钱一年用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出#xff08;LIFO#xff09;的栈#xff0c;并支持普通栈的全部四种操作#xff08;push、top、pop 和 empty#xff09;。 实现 MyStack 类#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除…用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop 和 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:queueint queue1;queueint 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.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty 实现 MyQueue 类 void push(int x) 将元素 x 推到队列的末尾代码int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空返回 true 否则返回 false 说明 你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 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:stackint s1;stackint 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.zqtcl.cn/news/505035/

相关文章:

  • html5 公众号 网站开发顺德手机网站建设
  • 上海医疗网站备案表千库网是什么
  • 陕西省西安市制作网站二次元 wordpress主题
  • 十堰网站建设weitian帮人做logo网站
  • 网站怎么做商家定位长沙网站建设长沙建设银行
  • 山西省建设厅网站查询哈尔滨网站开发电话
  • 网站建设app律师网站素材
  • 安徽 网站建设丹阳杨文军
  • 燃烧学课程网站建设怎么做网站的登录界面
  • 邹城网站定制wordpress托管套餐
  • 沧州网站优化公司logo网站免费
  • 网站制作公司知道万维科技建设银行企业网站无法打印回单
  • 个人网站做贷款广告知乎关键词搜索
  • 常熟外贸网站建设网站突然显示 建设中
  • 宜昌市住房和城乡建设官方网站泗洪网页设计
  • 计算机软件网站建设北京加盟网站建设
  • 推广网站怎么建设和维护strange wordpress主题
  • 安徽省建设厅网站打不开湘潭做网站找磐石网络一流
  • 沈阳做网站哪好网站建设后续说明
  • 给个网站最新的2021在网站的标题上怎么做图标
  • h5做网站用什么框架seo推广计划
  • 亿企搜网站建设百度网盘怎么领取免费空间
  • 天津网站排名提升如何用h5做网站
  • 外贸公司有必要建设网站吗赣州做网站哪家好
  • 功能型网站设计深圳网站优化效果
  • 郑州定制网站开发规模以上工业企业总产值
  • 锡林浩特市长安网站 建设初步方案廊坊百度推广排名优化
  • 搭建论坛网站的流程企业网络推广软件
  • 中国化工建设网站家居装修设计
  • 铜陵公司做网站大淘客网站建设app