#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++实现队列--数组实现和链表实现

最新文章

  1. CAN总线(一)
  2. Python.Scrapy.14-scrapy-source-code-analysis-part-4
  3. 单机安装HBase
  4. 当碰到非ARC写的文件时在ARC环境下运行报错时解决办法
  5. TM2013修改帐号数据目录
  6. ACM1877_又一版A+B
  7. Java批量文件打包下载zip
  8. url的非法字符有哪些
  9. org/hamcrest/SelfDescribing
  10. golang之interface(接口)与 reflect 机制
  11. .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper
  12. Post数据到 https异常:基础连接已经关闭: 连接被意外关闭 解决办法
  13. head first c&amp;lt;11&amp;gt;在根据网络编程
  14. 介绍Python程序员常用的IDE和其它开发工具
  15. kafka原理和实践(一)原理:10分钟入门
  16. 面试题之python基础
  17. 总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
  18. DotNetty项目基本了解和介绍
  19. &#39;Microsoft.VisualStudio.Editor.Implementation.EditorPackage&#39; package did not load correctly
  20. maven 基本框架搭建

热门文章

  1. day62-html-标签
  2. 如何正确理解SQL关联子查询
  3. ZJNU 1310 - 排队——中高级
  4. docker 一些简略环境搭建及部分链接
  5. Python——气象数据分析
  6. oauth2 Spring Security
  7. istio介绍
  8. python处理nii格式文件
  9. django,模板继承常用标签和规则
  10. 提高线程数,解决redis超时问题