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