(1) 假设以数组 sequ[MaxSize] 存放环形队列的元素,同时Rear和Len分别指示 环形队列中队尾元素的位置和内含元素的个数。设计相应的入队和出队算法。
代码:
#include <iostream>
using namespace std;
const int MaxSize = 10;
template <class T>
class CirQueue
{
public:
CirQueue() {
rear=MaxSize-1;
len=0;
}
~CirQueue() { }
void EnQueue(T x);
T DeQueue();
private:
T data[MaxSize];
T rear;
int len;
};
template<class T>
void CirQueue<T>::EnQueue(T x) {
if(len==MaxSize) {
throw 'x';
}
rear=(rear+1)%MaxSize;
data[rear]=x;
len++;
return;
}
template<class T>
T CirQueue<T>::DeQueue() {
int x,First;
if(len==0) {
throw 'y';
}
First=((rear+MaxSize)-len+1)%MaxSize;
x=data[First];
len--;
return x;
}
int main() {
int i;
int A[10]={1,2,3,4,5,6,7,8,9,10};
CirQueue<int> CQ;
try{
cout<<"队列开始入队:"<<endl;
for(i=0;i<sizeof(A)/sizeof(int);i++) {
CQ.EnQueue(A[i]);
cout<<A[i]<<" 入队"<<endl;
}
}catch(char x) {
cout<<"队列已满! "<<A[i]<<" 不能入队!"<<endl;
}
try{
cout<<"队列开始出队:"<<endl;
for(i=0;i<sizeof(A)/sizeof(int);i++) {
cout<<CQ.DeQueue()<<" 出队"<<endl;
}
}catch(char y) {
cout<<"队列已空,不能出队!"<<endl;
}
return 0;
}