c++简单实现循环队列
栈的数据结构是先进后出,而队列的数据结构就是 一个出口一个入口入口只能入队,出口只能出队
实现的代码如下:
- /*
- 循环静态队列实现 2017年8月5日07:50:58
- */
- #ifndef __QUEUE_H__
- #define __QUEUE_H__
- #include <Windows.h>
- class Queue
- {
- public:
- Queue(); //无参构造
- Queue(DWORD); //有参构造
- ~Queue(); //析构
- BOOL push(UINT); //入队
- BOOL pop(UINT&); //出队
- void traverse(); //遍历
- BOOL isEmpty(); //是否为null
- BOOL isFull(); //是否已满
- private:
- DWORD m_qUeuesize; //队列的数组长度
- DWORD m_front; //队列第一个元素索引
- DWORD m_rear; // 队列下一个可用元素索引
- PDWORD m_pTr; //元素的指针
- };
- Queue::Queue()
- :m_qUeuesize(),
- m_front(NULL),
- m_rear(NULL)
- {
- m_pTr = new DWORD[m_qUeuesize];
- if(!m_pTr)return;
- ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
- }
- Queue::Queue(DWORD dwSize)
- :m_qUeuesize(dwSize),
- m_front(NULL),
- m_rear(NULL)
- {
- m_pTr = new DWORD[m_qUeuesize];
- if(!m_pTr)return;
- ZeroMemory(m_pTr,sizeof(DWORD)*m_qUeuesize);
- }
- Queue::~Queue()
- {
- if(m_pTr)
- delete [] m_pTr;
- }
- BOOL Queue::push(UINT Element)
- {
- if (isFull())
- {
- //队列已满 入队失败
- return FALSE;
- }else
- {
- m_pTr[m_rear] = Element;
- m_rear = (m_rear+) % m_qUeuesize;
- return TRUE;
- }
- }
- BOOL Queue::pop(UINT& Element)
- {
- if (isEmpty())
- {
- //队列是null的出队失败
- return FALSE;
- }else
- {
- Element = m_pTr[m_front]; //先把要出队的数据返回去
- m_front = (m_front+) % m_qUeuesize;
- }
- return TRUE;
- }
- BOOL Queue::isEmpty()
- {
- if (m_front == m_rear)
- return TRUE;
- else
- return FALSE;
- }
- BOOL Queue::isFull()
- {
- if((m_rear+) % m_qUeuesize == m_front)
- return TRUE;
- else
- return FALSE;
- }
- void Queue::traverse()
- {
- DWORD dwTempIndex = m_front;
- while(m_rear!=dwTempIndex)
- {
- printf("%d\t",m_pTr[dwTempIndex]);
- dwTempIndex = (dwTempIndex + ) % m_qUeuesize;
- }
- printf("\r\n");
- }
- #endif //__QUEUE_H__
演示代码
- #include <stdio.h>
- #include <stdlib.h>
- #include "Queue.h"
- int main(void)
- {
- UINT m_elem = NULL;
- Queue * tempPtr = new Queue();
- if (tempPtr->isEmpty())
- {
- printf("队列是null的\r\n");
- }
- tempPtr->push();
- tempPtr->push();
- tempPtr->push();
- tempPtr->push();
- tempPtr->push();
- if(tempPtr->isFull())
- {
- printf("队列已满\r\n");
- }else
- {
- tempPtr->push();
- }
- tempPtr->traverse();
- tempPtr->pop(m_elem);
- printf("m_elem:%d\r\n",m_elem);
- tempPtr->traverse();
- delete tempPtr;
- system("pause");
- return ;
- }
c++简单实现循环队列的更多相关文章
- Java实现一个简单的循环队列
在某些时候,我们不能被要求像数组一样可以使用索引随机访问,而是需要被限制顺序处理业务,今天介绍一种先进先出(FIFO)的线性数据结构:队列, 当然,还有后进先出(LIFO)的处理方式,即为栈(后续有时 ...
- C++编程练习(5)----“实现简单的循环队列的顺序存储结构“
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端 ...
- [从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...
- 数据结构之循环队列Demo
循环队列 比较简单,循环队列主要是判断队满.队空.有效元素个数 画图说明: 假设:队的长度为5(0-4) 但是实际maxsize为6,需要一个预留空间(不存储元素)做计算 继续添加3个元素后: 出队一 ...
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- 深入理解循环队列----循环数组实现ArrayDeque
我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...
- C语言实现循环队列
今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...
- 基于数组的循环队列(C++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
随机推荐
- @loj - 2289@「THUWC 2017」在美妙的数学王国中畅游
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个点编号 0 到 n-1,每个点有一个从 [0,1] 映射到 ...
- uni-app禁止滑动穿透
<view class="topWrapper" v-show="chooseShow" @click="chooseShow = false& ...
- Spark JDBC系列--Mysql tinyInt字段特殊处理
当spark取出表的scheme中,类型名为tinyint的字段,会被处理为Boolean型.而mysql中tinyint的sqlType都会默认处理为bit,所以如果数据库中的这类字段中,存储了0. ...
- Pytest - 使用介绍
1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...
- java Jre和Jdk的区别?
JRE:(Java Runtime Environment),java运行环境.包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开 ...
- H3C 公有地址和私有地址
- [转]ECMAScript 2016,2017 和 2018 中所有新功能的示例
很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 和 ES2018(最终草案) ...
- 写一个js配合rem
rem.js 目前笔者解决移动端的尺寸带来的样式问题,都是通过viewport + rem的.viewport 相信大家都用过了,而rem需要用js动态设置html的字体大小. 动态设置rem的根字体 ...
- Github开源人脸识别项目face_recognition
Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个 ...
- Codeforces 1100F(离线 or 在线)
传送门 •参考资料 [1]:在线线性基 [2]:离线线性基 [3]:离线线性基 •题意 给你 n 个数,m 次询问: 每次询问给定一个区间 $l,r$,求 $a_{l \cdots r}$ 异或的最大 ...