通過數組表示
#include <iostream>
#define NULL 0
using namespace std;
class MyQueue
{
private:
int *q;
int front_, rear_,maxsize;
public:
MyQueue(int s) : maxsize(s+1)
{
q=new int(maxsize);
front_=rear_=0;
}
~MyQueue()
{
delete q;
}
bool AddQ(int t);
bool DelQ(int &t);
bool QFull();
bool QEmpty();
};
bool MyQueue::AddQ(int t)
{
rear_=(++rear_)%maxsize;
if(rear_==front_)
{
cout << "The Queue is full" << endl;
if(!front_) rear_=maxsize-1;
else --rear_;
return false;
}
else
{
q[rear_] = t;
return true;
}
}
bool MyQueue::DelQ(int &t)
{
if(front_==rear_)
{
cout << "The Queue is empty";
return false;
}
else
{
front_=(++front_)%maxsize;
t=q[front_];
return true;
}
}
bool MyQueue::QEmpty()
{
if(front_==rear_)
return true;
else
return false;
}
bool MyQueue::QFull()
{
if((rear_+1)==front_)
return true;
else
return false;
}
int main()
{
MyQueue q(3);
for(int i=0;i<3;i++){
int a;
cin >> a;
q.AddQ(a);
}
while(!q.QEmpty())
{
int b;
q.DelQ(b);
cout << b << endl;
}
return 0;
}
通過鏈表表示
#include <iostream>
#define NULL 0
using namespace std;
class MyQueue
{
private:
struct node
{
int data;
node *link;
};
node *front;
node *rear;
public:
MyQueue()
{
front=NULL;
rear=NULL;
}
~MyQueue()
{
}
public:
bool QEmpty();
bool QAdd(int t);
bool QDel(int &t);
};
bool MyQueue::QEmpty()
{
if(front)
return false;
else
return true;
}
bool MyQueue::QAdd(int t)
{
node *temp=new node;
temp->data=t;
if(!front)
{
front=temp;
rear=temp;
}
else
{
temp->link=NULL;
rear->link=temp;
rear=temp;
}
return true;
}
bool MyQueue::QDel(int &t)
{
node *temp;
if(QEmpty())
{
cout << "The queue is empty" << endl;
return false;
}
else
{
temp=front;
front=front->link;
t=temp->data;
delete temp;
return true;
}
}
int main()
{
MyQueue q;
int a,b;
for(int i=0;i<5;i++)
{
cin >> a;
q.QAdd(a);
}
while(!q.QEmpty())
{
int b;
q.QDel(b);
cout << b << endl;
}
return 0;
}