数据结构--循环顺序队列C++(模板类实现)
作者:
AmbitionX
,
2022-05-03 14:49:49
,
所有人可见
,
阅读 268
#include <iostream>
using namespace std;
const int QueueSize = 100;
template <typename DataType>
class CirQueue
{
public:
CirQueue();
void EnQueue(DataType x);
DataType DeQueue();
DataType GetHead();
void Empty();
private:
DataType data[QueueSize];
int front, rear;
};
template <typename DataType>
CirQueue<DataType>:: CirQueue()
{
rear = front = QueueSize - 1;
}
template <typename DataType>
void CirQueue<DataType>:: EnQueue(DataType x)
{
if ((rear + 1) % QueueSize == front) throw "上溢";
rear = (rear + 1) % QueueSize;
data[rear] = x;
}
template <typename DataType>
DataType CirQueue<DataType>:: DeQueue()
{
if (rear == front) throw "下溢";
front = (front + 1) % QueueSize;
return data[front];
}
template <typename DataType>
DataType CirQueue<DataType>:: GetHead()
{
if (rear == front) throw "下溢";
return data[(front) + 1 % QueueSize];
}
template <typename DataType>
void CirQueue<DataType>:: Empty()
{
if (rear == front) cout << "队空" << endl;
else cout << "队不空" << endl;
}
int main()
{
CirQueue<int> Q{ };
cout << "1 和 2 入队";
Q.EnQueue(1);
Q.EnQueue(2);
cout << "当前对头的元素为: " << Q.GetHead() << endl;
int x;
try
{
x = Q.DeQueue();
cout << "出队操作,出来的元素是: " << x << endl;
}
catch (char *str)
{
cout << str << endl;
}
int y;
try
{
cout << "请输入待入队元素: ";
cin >> y;
cout << "待入队元素为: " << y << endl;
Q.EnQueue(y);
}
catch (char *str)
{
cout << str << endl;
}
Q.Empty();
return 0;
}