#include <iostream>

using namespace std;

template<typename T, int size = 0>
class Queue
{
public:
Queue(); bool isEmpty() const;
bool isFull()const; void enQueue(const T&);
T deQueue(); void traverse()const;
private:
T storge[size];
int first;
int last;
}; template<typename T, int size>
Queue<T, size>::Queue()
{
first = last = -1;
} template<typename T, int size>
bool Queue<T, size>::isEmpty()const
{
//如果为空,first必然为-1,因为在deQueue()出栈函数中已经处理
return first == -1;
} template<typename T, int size>
bool Queue<T, size>::isFull()const
{
//两种情况,第一种是正常的满,第二种是存在出队时的满
return first == 0 && last == size - 1 || last == first - 1;
} template<typename T, int size>
void Queue<T, size>::enQueue(const T& elem)
{
if (!isFull())
{
//last为-1或指向最后一个元素的位置时
if (last == -1 || last == size - 1)
{
storge[0] = elem;
last = 0;
//若队列为空,还需将first赋为0
if (first == -1)
{
first = 0;
}
}
else
{
storge[++last] = elem;
}
}
else
{
cout << "Queue full." << endl;
exit(1);
}
} template<typename T, int size>
T Queue<T, size>::deQueue()
{
if (isEmpty())
{
cout << "Queue empty." << endl;
exit(1);
}
T temp;
temp = storge[first];
//队列中只有一个元素时
if (first == last)
{
//这样,判断是否为空时只需判定first是否为-1
first = last = -1;
}
else if (first == size - 1)
{
//回到第一个元素位置
first = 0;
}
else
{
++first;
}
return temp;
} template<typename T, int size>
void Queue<T, size>::traverse()const
{
for (auto i = first; i <= last; ++i)
{
cout << storge[i] << " ";
}
cout << endl;
} int main()
{
Queue<int, 3> queue; queue.enQueue(10);
queue.enQueue(10);
queue.enQueue(10); cout << queue.isFull() << endl; queue.traverse();
queue.deQueue();
queue.traverse();
queue.deQueue();
cout << queue.isEmpty() << endl;
queue.deQueue();
cout << queue.isEmpty() << endl;
system("pause");
return 0;
}

运行测试:

参考:C++实现队列--数组实现和链表实现

用数组实现队列(C++)的更多相关文章

  1. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列

    题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间. 这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数 ...

  2. Python:数组、队列及堆栈的使用(list用法)--转

    Python编程中数组.队列及堆栈用于保存一组数据或对象的序列,元素可以是各种类型混合在一起,定义格式为[元素,元素,……,元素],用变量[位置]即可取出相应的元素,其中“位置”是从零开始计算. 数组 ...

  3. php中数组模拟队列、栈的函数以及数组指针操作

    1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...

  4. PHP使用数组实现队列(实际就是先进先出怎样实现)

    PHP的数组处理函数还能够将数组实现队列,堆栈是"先进后出". 在堆栈中,最后压入的数据(进栈),将会被最先弹出(出栈).而队列是先进先出.就如同银行的排号机 PHP中将数组当做一 ...

  5. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  6. 【Weiss】【第03章】练习3.25:数组模拟队列

    [练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空 ...

  7. 用数组实现队列(顺序队列&循环队列)

    用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...

  8. Java数组模拟队列 + 优化

    队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则. 即:先存入队列的数据,要先取出.后存入的要后取出 示意图:(使用数组模拟队列示意图)  数组模拟队列 队列本身是有序列表 ...

  9. 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)

    一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...

  10. JDK数组阻塞队列源码深入剖析

    JDK数组阻塞队列源码深入剖析 前言 在前面一篇文章从零开始自己动手写阻塞队列当中我们仔细介绍了阻塞队列提供给我们的功能,以及他的实现原理,并且基于谈到的内容我们自己实现了一个低配版的数组阻塞队列.在 ...

随机推荐

  1. Django专题-ugettext_lazy

    标准翻译 使用函数 ugettext() 来指定一个翻译字符串. 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间. 在下面这个例子中,文本 "Welcome to my site&q ...

  2. C/S 和 B/S架构

    C/S 和 B/S架构 一.单机架构 应用领域: 植物大战僵尸 office 二.C/S架构 [ 应用领域: QQ 大型网络游戏 计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和 ...

  3. 编译x64c++出错,errorC1900:P1和P2之间 Il 不匹配问题

    搜索了下相关资料,有一个说法是编译x64时本地缺失一些东西,2015安装update3就行. 我的是2013update4,找了下最新的有update5,安装然而并没有什么用. 最后还是重新找对应版本 ...

  4. 四、Shell脚本高级编程实战第四部

    一.比较两个数的大小 #!/bin/shread -p "Pls input two num:" a b[ -z "$a" ] || [ -z "$b ...

  5. 阿里云 asp.net core nginx 单机部署

    1. dotnet core 安装 https://www.microsoft.com/net/download#core 安装之前要安装依赖:yum install libunwind libicu ...

  6. 吴裕雄--天生自然 PYTHON3开发学习:正则表达式

    import re print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.match('com', 'www.runoo ...

  7. CodeForces - 977E

    题:https://codeforces.com/problemset/problem/977/E 题意:给你一个图,问你有几个没有杂边的单环(度全为2) 分析:单环点的度数一定是2,连续边,判断是否 ...

  8. 线程池-进程池-io模型

    一.线程池与进程池 什么是池?简单的说就是一个容器,一个范围 在保证计算机硬件安全的情况下最大限度的充分利用计算机, 池其实是降低了程序的运行效率,但是保证了计算机硬件的安全,也是实现了一个并发的效果 ...

  9. java gc 总结

    垃圾查找 1.基于计数器 对象有引用计数,计数为0的,可以被收集 2.基于有向图 从gc root(栈.静态变量.JNI 变量)遍历,能访问的对象,不用被收集,其他的,可以被收集 因为计数器不能解决 ...

  10. 吴裕雄--天生自然python学习笔记:python 用 Open CV 进行人脸识别

    要对特定图像进行识别,最关键的是要有识别对象的特征文件, OpenCV 己内置 了人脸识别特征文件,我们只需使用 OpenCV 的 CascadeClassifier 类即可进行识别 . 创建 Cas ...