队列——先进先出
队列的一个缺点——出队后的内存空间浪费了,不能二次利用
环形队列——解决以上缺点的队列,用过的内存空间可以重复利用

github: https://github.com/HITFishily/CandCPP

代码:

#include <iostream>

using namespace std;

template<typename T> class CircleQueue
{
private:
unsigned int m_size;
int m_front;
int m_rear;
T* m_data;
public:
CircleQueue(unsigned int size)
{
m_front = 0;
m_rear = 0;
m_size = size + 1;
m_data = new T[m_size + 1];
}
~CircleQueue()
{
delete[] m_data;
}
bool isEmpty()
{
return m_front == m_rear;
}
bool isFull()
{
return m_front == (m_rear + 1) % m_size;
}
void push(T data)
{
if (isFull())
{
throw "The queue is full,cannot keep pushing.";
}
m_data[m_rear] = data;
m_rear = (m_rear + 1) % m_size;
}
void pop()
{
if (isEmpty())
{
throw new exception("The queue is empty,cannot keep poping.");
}
m_front = (m_front + 1) % m_size;
}
void popall()
{
if (isEmpty())
{
throw new exception("The queue is empty,cannot keep poping.");
}
while (m_front != m_rear)
m_front = (m_front + 1) % m_size;
}
T top()
{
if (isEmpty())
{
throw new exception("The queue is empty,cannot access the top element.");
}
return m_data[m_front];
}
};

【数据结构】C++语言环形队列的实现的更多相关文章

  1. 数据结构C语言版-队列

    #include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; ty ...

  2. 【数据结构】C++语言无锁环形队列的实现

    无锁环形队列 1.Ring_Queue在payload前加入一个头,来表示当前节点的状态 2.当前节点的状态包括可以读.可以写.正在读.正在写 3.当读完成后将节点状态改为可以写,当写完成后将节点状态 ...

  3. 数据结构-环形队列 C和C++的实现

    队列: 含义:是一种先入先出(FIFO)的数据结构. 当我们把数据一个一个放入队列中.当我们需要用到这些数据时,每次都从队列的头部取出第一个数据进行处理.就像排队进场一样,先排队的人先进场. 结构如下 ...

  4. <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现

    栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外, ...

  5. 【数据结构(C语言版)系列三】 队列

    队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...

  6. C#实现环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...

  7. 【转】C#环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...

  8. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  9. 5 数据结构、栈、队列、链表、list、dict、迷宫问题

    1.什么是数据结构 2.栈:后进先出 1.什么是栈 栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表.   2.栈的Python实现 stack = [] stack.ap ...

随机推荐

  1. java 移动距离

    移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3- 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 5 ...

  2. OBS Studio 24.0 RC1 发布 – 有大惊喜

    导读 对于那些使用OBS Studio进行跨平台直播和屏幕录制需求的人来说,OBS Studio 24.0即将推出,但首先发布的是他们的候选版本,以审查进入这一重大更新的新功能. OBS Studio ...

  3. JS - 判断字符串某个下标的值

    <html><body> <script type="text/javascript"> var str="0123456789!&q ...

  4. Java笔记--枚举&注解

    1.自定义枚举类的实现,例: class Season{ //1,提供类的属性,声明为rivate final private final String name; private final Str ...

  5. Java的equals方法的使用技巧

    Java的equals方法的使用技巧 1.业务场景: 在某个社交软件中,要求每个用户的用户名(name)必须独一无二,那么在每次增加新用户的时候,都要对该用户的注册名进行判断,如果当前用户名已经被占用 ...

  6. DOM基础1

    Document Object Model 文档对象模型 1.改内容: innerHTML 例:div1.innerHTML = "我能干<br />什么";      ...

  7. 使用linux将一个服务器上的文件或者文件夹复制黏贴到另一个服务器上

    一.复制文件: (1)将本地文件拷贝到远程  scp 文件名 用户名@计算机IP或者计算机名称:远程路径 本地192.168.1.8客户端 scp /root/install.* root@10.12 ...

  8. spring boot 接口service有多个实现类

    接口.java public interface DeService { } 接口实现类1.java @Service("ud")public class DeServiceImp ...

  9. php笔记04

    PHP+MySQL 连接数据库 mysqli <?php $servername="localhost"; $username="root"; $pass ...

  10. JuJu团队11月27号工作汇报

    JuJu团队11月27号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 将真实数据处理后按矩阵读入, 以供训练使用  提供generator的接口 对julia语言还不够 ...