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++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
随机推荐
- Alternating Direction Method of Multipliers -- ADMM
前言: Alternating Direction Method of Multipliers(ADMM)算法并不是一个很新的算法,他只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提 ...
- 阿里云发布 Redis 5.0 缓存服务:全新 Stream 数据类型带来不一样缓存体验
4月24日,阿里云正式宣布推出全新 Redis 5.0 版本云数据库缓存服务,据悉该服务完全兼容 4.0 及早期版本,继承了其一贯的安全,稳定,高效等特点并带来了全新的 Stream 数据结构及多项优 ...
- HZOJ Drink
神仙题,打了个whs式暴力卡常卡A了(我没脸),正解还是要打的,然而作者的题解看不懂…… Drink: 看惯了罗马音的小朋友们都会知道r发l的音,题目名:D Link. 每次修改都会改变O( N ^ ...
- 14海量日志提取出现次数最多的IP
问题描述:现有某网站海量日志数据,提取出某日访问该网站次数最多的那个IP. 分析:IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址, 如果将每个IP地址看做是数组的索引的话,那么 ...
- HDU-6668-Game 百度之星第一场B
在多个连续的区间段中,选出连续重复度最高的区间,这样连续选出多个重复度最高的不相交区间,然后从第一个区间的左边已经右边开始,连续贪心即可,答案取最小值 #include<iostream> ...
- javascript 容易混淆遗忘的基础知识
1. 标识符 所谓标识符,就是指变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格式规则组合起来的一或多个字符: 1.1 第一个字符必须是一个字母.下划线( _ )或 ...
- Echarts Map地图下钻至县级
**准备工作:**1.首先使用vue-cli的脚手架生成vue项目. 2.然后使用npm安装echartsnpm install echarts -S 3.安装完后再mian.js中挂载到vue的实例 ...
- 得到Access数据库中所有表名
public static List<string> GetShemaTables(string db) { string pa ...
- codeforces 1230 div2
C 给一个图,并且在边上放上多米诺骨牌,使得每个多米诺骨牌指向的顶点的数字是一致的,并且每种骨牌只能用一种.问最多能够覆盖多少条边. 先生成每一个点指向的数字,然后判断就好了. #include< ...
- Vue基础练习之计算属性、方法、监听器
<body> <div id="root"> {{fullName()}} {{age}} </div> <script> var ...