循环队列手撕
#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <map>
#include <cassert>
#include <set>
#include <unordered_map>
using namespace std;
class Xqueue
{
public:
int head,rear;
int* p;
int maxsize;
Xqueue(int num=10):head(0),rear(0),maxsize(num)
{
p=new int[maxsize];
assert(p!=NULL);
}
bool Isempty() const
{
return head==rear?true:false;
}
bool isFull() const
{
return ((rear+1)%maxsize==head)?true:false;
}
int getSize() const
{
return (rear-head+maxsize)%maxsize;
}
bool Enqueue(const int& x)
{
if(isFull()) return false;
p[rear]=x;
rear=(rear+1)%maxsize;
return true;
}
bool Dequeue(int& x)
{
if(Isempty()) return false;
x=p[head];
head=(head+1)%maxsize;
return true;
}
bool Xclear()
{
head=rear=0;
}
bool getFront(int& x) const
{
if(Isempty()) return false;
x=p[head];
return true;
}
friend ostream& operator <<(ostream& os,Xqueue& Q);
};
ostream& operator<<(ostream& os,Xqueue& Q)
{
for(int i=Q.head;i!=Q.rear;i=(i+1)%Q.maxsize)
{
os<<i<<":"<<Q.p[i]<<endl;
}
return os;
}
int main()
{
Xqueue a(30);
cout<<a.maxsize;
}