3.2 队列
队列(Queue)是插入操作限定在表的尾部而其他操作限定在表的头部进行的线性表。队列又称为FIFO表或LILO表。
C++利用数组实现一个循环顺序队列:
//Queue.h
#pragma once
#include "stdafx.h"
#include <iostream>
using std::cout;
namespace Andersoft{
template<class T>
class CSeqQueue{
private:
int maxsize;
T *data;
int front;
int rear;
public:
T &operator[](int index){
return data[index];
}
CSeqQueue(int size){
data=new T[size];
maxsize=size;
front=rear=-1;
}
int GetLength(){
if (IsEmpty())
return 0;
else if (IsFull())
return maxsize;
else
return (rear-front+maxsize)%maxsize;
}
void Clear(){
front=rear=-1;
}
bool IsEmpty(){
if(front==-1&&rear==-1)
return true;
else
return false;
}
bool IsFull(){
if(front==rear&&!IsEmpty())
return true;
else
return false;
}
void In(T item){
if(IsFull()){
cout<<"Queue is full";
return;
}
rear=(rear+1)%maxsize;
data[rear]=item;
}
T Out(){
if(IsEmpty()){
cout<<"Queue is empty";
return T();
}
if (GetLength()==1){
T outer=data[rear];
Clear();
return outer;
}
else{
front=(front+1)%maxsize;
return data[front];
}
}
};
}