文章目录

  • 1 使用栈实现队列
    • 1.1 问题分析
    • 1.2 解决方案设计
    • 1.3 实现思路
    • 1.4 代码实现
    • 1.5 分析

1 使用栈实现队列

1.1 问题分析

用栈实现队列等价于用“后进先出”的特性实现“先进先出”的特性。

1.2 解决方案设计

1.3 实现思路

1.4 代码实现

StackToQueue.h:

#ifndef STACKTOQUEUE_H
#define STACKTOQUEUE_H#include "LinkStack.h"
#include "Queue.h"namespace LemonLib {template <typename T>
class StackToQueue : public Queue<T>
{protected:mutable LinkStack<T> m_stack_in;mutable LinkStack<T> m_stack_out;void move() const{if (m_stack_out.size() == 0){while (m_stack_in.size() > 0){m_stack_out.push(m_stack_in.top());m_stack_in.pop();}}}public:void add(const T& e){m_stack_in.push(e);}void remove(){move();if (m_stack_out.size() > 0){m_stack_out.pop();}else{THROW_EXCEPTION(InvalidOperationException, "stack to queue remove error, queue is empty");}}T front() const{move();if (m_stack_out.size() > 0){return m_stack_out.top();}else{THROW_EXCEPTION(InvalidOperationException, "stack to queue front error, queue is empty");}}void clear(){m_stack_in.clear();m_stack_out.clear();}int size() const{return m_stack_in.size() + m_stack_out.size();}
};
}#endif // STACKTOQUEUE_H

1.5 分析

使用的栈实现队列的方式时间复杂度出现了很多个O(n),所以无实际工程意义。

StackToQueue相关推荐

  1. 第十章 基本数据结构——栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

  2. 实现一个队列类,该类用两个栈来实现

    1 /* 2 * 实现一个队列类,该类用两个栈来实现 3 * 队列和栈的主要区别是,队列是先进先出,就像我们在食堂[派对打饭一样,先到先打 4 * 栈是先进后出,就像枪里面的子弹,最先进去的把压到了最 ...

  3. java中printarray和selectsort方法_算法题(一)

    目录 1 左神部分集锦 2 Leetcode前150题 3 牛客网剑指offer 4 JavaG 5 题目中的细节处理 1 左神部分集锦 1.1 Code01_FindNumber_B_In_A 在有 ...

  4. 算法练习day8——190326(队列实现栈、栈实现队列)

    1.仅用队列结构实现栈结构 1.1 分析: 1.所有数先入data队列: 2.将前n-1个数入help队列,弹出最后一个数: 3.将help中的前n-2个数入data队列,弹出最后一个数: 4.重复2 ...

  5. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  6. 基本数据结构 - 栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

  7. 栈(Stack)与队列(Queue)

    定义 栈:后进先出(LIFO-last in first out):最后插入的元素最先出来. 队列:先进先出(FIFO-first in first out):最先插入的元素最先出来. 图示 在这里插 ...

最新文章

  1. c语言答案填空选择,C语言试题配答案
  2. pyqt5实战之简陋的计算器
  3. python数据库密码如何加密_MySQL怎么设置密码
  4. gwt格式_GWT HTTP请求替代方案
  5. 人工智能AI实战100讲(三)-激光雷达原理和分类
  6. 作者:刘建楠(1963-),男,就职于中国石油庆阳石化公司
  7. 奥运奖牌计数(信息学奥赛一本通-T1064)
  8. java synoch 加锁_线程间通信 - HappyCowboy - 博客园
  9. PNG免抠古风纹理背景太漂亮了,直接应用的才是好素材
  10. 凉山火灾启示录:面对大火,AI 能做些什么?
  11. PHP Web Shell in browser
  12. 最短路计数(松弛操作处理)
  13. iPhone卡顿、变慢要如何解决?12 种提升手机顺畅度技巧
  14. WebStart啟動程式在關閉時關閉javaw進程
  15. dBm与功率(w)换算关系
  16. 你不是迷茫,你是自制力不强
  17. 任正非讲话稿400篇_任正非讲话稿400余篇分享,最全任正非演讲稿下载
  18. Apache优化相关
  19. Python中的数值运算与逻辑运算
  20. Java基本语法——数组

热门文章

  1. STM32 基础系列教程 1- CubeMX+GPIO
  2. DFT实训教程笔记2(bibili版本)- Scan synthesis practice
  3. android按键映射
  4. Sphinx+gitee+Read the Docs搭建在线文档系统
  5. 【DIY】热水器升级加装远程wifi控制功能,esp8266远程红外控制热水器启动,新增自动定时烧水断电需求整理...
  6. Linux文件系统映像:Initranfs 和 Initrd
  7. 基于小波变换的图像压缩解压缩仿真
  8. 1、HTML 初步认识
  9. busybox编译笔记
  10. Python -- dict 类