// 循环队列.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"CircleQueue.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CircleQueue<int> cq;
cout << "请输入入队元素: ";
int i;
cin >> i;
while(i!=-1)
{
cq.EnQueue(i);
cout << "length: " << cq.GetLength() << endl;
cin >> i;
}
while(!cq.Empty())
{
cout << cq.GetFront()<< endl;
cq.DeQueue();
}
return 0;
}
//CircleQueue.h
//
const int QueueSize = 1000;
template<class T>
class CircleQueue
{
public:
CircleQueue(){rear=front=0;}
void EnQueue(T x);
T DeQueue();
T GetFront();
int GetLength();
bool Empty();//{return front==rear? true:false;}
private:
T data[QueueSize];
int front;
int rear;
};
template<class T>
void CircleQueue<T>::EnQueue(T x)
{
if((rear+1)%QueueSize==front) throw "overflow";
rear = (rear+1)%QueueSize;
data[rear] = x;
}
template<class T>
T CircleQueue<T>::DeQueue()
{
if(rear==front)throw"underflow";
front = (front + 1) % QueueSize;
return data[front];
}
template<class T>
T CircleQueue<T>::GetFront()
{
if(rear==front) throw "underflow";
return data[(front + 1)%QueueSize];
}
template<class T>
int CircleQueue<T>::GetLength()
{
return (rear - front + QueueSize)%QueueSize;
}
template<class T>
bool CircleQueue<T>::Empty()
{
return (rear==front)? true:false;
}
循环队列
最新推荐文章于 2020-04-25 19:46:13 发布