// CircleQueueMain.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
const int QueueSize = 100; //定义存储队列元素的数组的最大长度
template <class T> //定义模板类 CirQueue
class CirQueue
{
public:
CirQueue(); //构造函数,置空队
~CirQueue(); //析构函数
void EnQueue(T x); //将元素 x 入队
T DeQueue(); //将队头元素出队
T GetQueue(); //取队头元素(并不删除)
bool Empty(); //判断队列是否为空
void PrintCirQueue();
private:
T data[QueueSize]; //存放队列元素的数组
int front, rear; //队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置
};
template <class T>
CirQueue<T>::CirQueue()
{
front = rear = 0;
}
template <class T>
CirQueue<T>::~CirQueue()
{
}
template <class T>
void CirQueue<T>::EnQueue(T x)
{
if ((rear + 1) % QueueSize == front) throw"上溢";
rear = (rear + 1) % QueueSize;
data[rear] = x;
}
template <class T>
T CirQueue<T>::DeQueue()
{
if (rear == front) throw"下溢";
front = (front + 1) % QueueSize;
return data[front];
}
template <class T>
T CirQueue<T>::GetQueue()
{
int i;
if (rear == front) throw"下溢";
i = (front + 1) % QueueSize; //注意不要给队头指针赋值
return data[i];
}
template <class T>
bool CirQueue<T>::Empty()
{
if (front == rear)
return 1;
else
return 0;
}
template <class T>
void CirQueue<T>::PrintCirQueue()
{
for (int i = (front + 1) % QueueSize; i <= rear ; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
int main()
{
CirQueue<int>a; //创建模版类的实例
if (a.Empty())
{
cout << "循环队列空,对 10 执行入队操作:" << endl;
try
{
a.EnQueue(10); //入队操作
}
catch (char *wrong)
{
cout << wrong;
}
cout << "读取队头元素:" << endl;
cout << a.GetQueue() << endl; //读队头元素
cout << "对 15、10、5、0、-5 执行入队操作:" << endl;
try
{
a.EnQueue(15);
a.EnQueue(10);
a.EnQueue(5);
a.EnQueue(0);
a.EnQueue(-5);
}
catch (char *wrong)
{
cout << wrong;
}
cout << "队列内元素为:";
a.PrintCirQueue();
cout << "读取队头元素:" << endl;
cout << a.GetQueue() << endl;
cout << "执行出队操作:" << endl; //出队操作
a.DeQueue();
cout << "队列内元素为:";
a.PrintCirQueue();
cout << "读取队头元素:" << endl;
cout << a.GetQueue() << endl;
}
else
{
cout << "循环队列不空" << endl;
}
system("pause");
return 0;
}
循环队列
最新推荐文章于 2023-11-08 20:51:46 发布