栈的数据结构是先进后出,而队列的数据结构就是 一个出口一个入口入口只能入队,出口只能出队

实现的代码如下:

  1. /*
  2. 循环静态队列实现 2017年8月5日07:50:58
  3. */
  4. #ifndef __QUEUE_H__
  5. #define __QUEUE_H__
  6. #include <Windows.h>
  7. class Queue
  8. {
  9. public:
  10. Queue(); //无参构造
  11. Queue(DWORD); //有参构造
  12. ~Queue(); //析构
  13. BOOL push(UINT); //入队
  14. BOOL pop(UINT&); //出队
  15. void traverse(); //遍历
  16. BOOL isEmpty(); //是否为null
  17. BOOL isFull(); //是否已满
  18. private:
  19. DWORD m_qUeuesize; //队列的数组长度
  20. DWORD m_front; //队列第一个元素索引
  21. DWORD m_rear; // 队列下一个可用元素索引
  22. PDWORD m_pTr; //元素的指针
  23. };
  24. Queue::Queue()
  25. :m_qUeuesize(),
  26. m_front(NULL),
  27. m_rear(NULL)
  28. {
  29. m_pTr = new DWORD[m_qUeuesize];
  30. if(!m_pTr)return;
  31. ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
  32. }
  33. Queue::Queue(DWORD dwSize)
  34. :m_qUeuesize(dwSize),
  35. m_front(NULL),
  36. m_rear(NULL)
  37. {
  38. m_pTr = new DWORD[m_qUeuesize];
  39. if(!m_pTr)return;
  40. ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
  41. }
  42. Queue::~Queue()
  43. {
  44. if(m_pTr)
  45. delete [] m_pTr;
  46. }
  47. BOOL Queue::push(UINT Element)
  48. {
  49. if (isFull())
  50. {
  51. //队列已满 入队失败
  52. return FALSE;
  53. }else
  54. {
  55. m_pTr[m_rear] = Element;
  56. m_rear = (m_rear+) % m_qUeuesize;
  57. return TRUE;
  58. }
  59. }
  60. BOOL Queue::pop(UINT& Element)
  61. {
  62. if (isEmpty())
  63. {
  64. //队列是null的出队失败
  65. return FALSE;
  66. }else
  67. {
  68. Element = m_pTr[m_front]; //先把要出队的数据返回去
  69. m_front = (m_front+) % m_qUeuesize;
  70. }
  71. return TRUE;
  72. }
  73. BOOL Queue::isEmpty()
  74. {
  75. if (m_front == m_rear)
  76. return TRUE;
  77. else
  78. return FALSE;
  79. }
  80. BOOL Queue::isFull()
  81. {
  82. if((m_rear+) % m_qUeuesize == m_front)
  83. return TRUE;
  84. else
  85. return FALSE;
  86. }
  87. void Queue::traverse()
  88. {
  89. DWORD dwTempIndex = m_front;
  90. while(m_rear!=dwTempIndex)
  91. {
  92. printf("%d\t",m_pTr[dwTempIndex]);
  93. dwTempIndex = (dwTempIndex + ) % m_qUeuesize;
  94. }
  95. printf("\r\n");
  96. }
  97. #endif //__QUEUE_H__

演示代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "Queue.h"
  4. int main(void)
  5. {
  6. UINT m_elem = NULL;
  7. Queue * tempPtr = new Queue();
  8. if (tempPtr->isEmpty())
  9. {
  10. printf("队列是null的\r\n");
  11. }
  12. tempPtr->push();
  13. tempPtr->push();
  14. tempPtr->push();
  15. tempPtr->push();
  16. tempPtr->push();
  17. if(tempPtr->isFull())
  18. {
  19. printf("队列已满\r\n");
  20. }else
  21. {
  22. tempPtr->push();
  23. }
  24. tempPtr->traverse();
  25. tempPtr->pop(m_elem);
  26. printf("m_elem:%d\r\n",m_elem);
  27. tempPtr->traverse();
  28. delete tempPtr;
  29. system("pause");
  30. return ;
  31. }

c++简单实现循环队列的更多相关文章

  1. Java实现一个简单的循环队列

    在某些时候,我们不能被要求像数组一样可以使用索引随机访问,而是需要被限制顺序处理业务,今天介绍一种先进先出(FIFO)的线性数据结构:队列, 当然,还有后进先出(LIFO)的处理方式,即为栈(后续有时 ...

  2. C++编程练习(5)----“实现简单的循环队列的顺序存储结构“

    队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端 ...

  3. [从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现

    [从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...

  4. 数据结构之循环队列Demo

    循环队列 比较简单,循环队列主要是判断队满.队空.有效元素个数 画图说明: 假设:队的长度为5(0-4) 但是实际maxsize为6,需要一个预留空间(不存储元素)做计算 继续添加3个元素后: 出队一 ...

  5. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列

    Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  6. Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列

    Atitit.升级软件的稳定性---基于数据库实现持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  7. 深入理解循环队列----循环数组实现ArrayDeque

    我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...

  8. C语言实现循环队列

    今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...

  9. 基于数组的循环队列(C++模板实现)

    循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...

随机推荐

  1. 自定义View系列教程04--Draw源码分析及其实践

    深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...

  2. C++构造函数和文件组织

    构造你的函数 在 main() 上方声明函数,并在 main 下方定义函数 在 main() 上方同时声明并定义函数. 随着 C++ 程序变得越来越复杂,你可能需要将代码分成多个文件.分开保存函数定义 ...

  3. 从外网站点获取的html去除换行回车制表位\n\r\t

    StringStr.Replace("\\r", "").Replace("\\n", "").Replace(&quo ...

  4. 小程序clearinterval无效解决

    小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...

  5. 【原生JS】简单取随机数

    因为js本身取随机数仅能取 0 到 1之间的数,所以..... 取 1 - 10之间的随机数. function getSJS(x,y,z){ var int = null; while(int &g ...

  6. iptables在我们的网络机房实现NAT共享上网

    工作环境:上层代理192.168.60.6(4480),只授予教师机(192.168.62.111)使用该代理的权限 目标:不使用squid代理上网,而是使用NAT的方式上网 方法: 1) 确保停止教 ...

  7. Vue 动画的钩子函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. hadoop-1.2.1 伪分布配置

    首先JDK安装及相关环境变量配置 # Java environment setting JAVA_HOME=/usr/java/default CLASSPATH=.:$JAVA_HOME/lib/t ...

  9. win10系统激活 快捷方式

    系统不定期就会提示激活,每次激活都是找各种工具折腾,今天捣鼓简单的脚本直接激活~~ 首先查看自己系统的版本,后面才能找到合适的激活码 win+R 启动程序 输入 winver 即可查看系统版本 2.查 ...

  10. 【t046】牛跳

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] John的奶牛们计划要跳到月亮上去.它们请魔法师配制了P(1 <= P <=150,000 ...