您的位置:首页 > 编程语言 > C语言/C++

C++实现循环队列之顺序存储

2015-07-06 10:30 1001 查看
#include <iostream>
#include <string>
using namespace std;

const int QueueSize = 100;

template<typename T>
class CircleQueue{
public:
CircleQueue(){ front = rear = QueueSize - 1; }   //构造函数
CircleQueue(T a[],int n);
~CircleQueue(){ }                             //析构
void InputQue(T x);
T OutputQue();
T GetQueue();
string Empty();
void Print();
private:
T data[QueueSize];
int front, rear;
};

template<typename T>
CircleQueue<T>::CircleQueue(T a[], int n)      //构造函数初始化队列
{
front = rear = QueueSize - 1;
if (n <=QueueSize){
for (int i = 0; i < n; ++i)
{
rear = (rear + 1) % QueueSize;
data[rear] = a[i];
}
}
}

template<typename T>
void CircleQueue<T>::InputQue(T x)     //入队,队尾插入
{
if (rear == front)   //是否队满
throw "下溢";
rear = (rear + 1) % QueueSize;
data[rear] = x;
}

template<typename T>
T CircleQueue<T>::OutputQue()      //出队
{
if (rear == front) throw "下溢";    //是否队空
front = (front + 1) % QueueSize;
return data[front];
}

template<typename T>
T CircleQueue<T>::GetQueue()
{
if (rear == front) throw "下溢";
int i = (front + 1) % QueueSize;
return data[i];
}

template<typename T>
void CircleQueue<T>::Print()         //遍历输出
{
int p = front;
while ((p + 1) % QueueSize != rear)
{
p = (p + 1) % QueueSize;
cout << data[p] << " ";
}
p = (p + 1) % QueueSize;
cout << data[p] << " " << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
int a[] = { 1, 2, 3, 4, 5, 6 };
CircleQueue<int> A(a, 6);
A.Print();
A.InputQue(7);
A.Print();
cout<< A.GetQueue() <<endl;
A.Print();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: