1. 当队尾插入元素时,Q.rear++;弹出元素时,Q.front++;
2.当队列满时,Q.rear的下一个元素是Q.front;
#include <iostream>
using namespace std;
#define MAXQSIZE 100
typedef int QElemType;
typedef struct{
QElemType* base;
int front;
int rear;
}SqQueue;
//初始化队列
bool InitQueue(SqQueue &Q)
{
Q.base = (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
{
exit(-1);
}
Q.front = Q.rear = 0;
return true;
}
//返回队列长度
int QueueLength(SqQueue &Q)
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
//在队尾插入元素
bool EnQueue(SqQueue &Q,QElemType e)
{
if((Q.rear+1)%MAXQSIZE == Q.front)
return false;
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1)%MAXQSIZE;
return true;
}
//删除队列头元素
bool DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.front == Q.rear)
{
return false;
}
else
{
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXQSIZE;
return true;
}
}
//获得队列头元素
bool GetHead(SqQueue &Q,QElemType &e)
{
if(Q.front == Q.rear)
{
return false;
}
else
{
e = Q.base[Q.front];
return true;
}
}
//打印队列
void PrintQueue(SqQueue &Q)
{
int index = Q.front;
while(index%MAXQSIZE != Q.rear)
{
cout<<Q.base[index]<<" ";
++index;
}
cout << endl;
}
//销毁队列
void DestroyQueue(SqQueue& Q)
{
delete Q.base;
Q.base = NULL;
Q.front = 0;
Q.rear = 0;
}
void main()
{
SqQueue Q;
InitQueue(Q);
for(int i = 1; i<=5; i++)
{
EnQueue(Q,i);
}
PrintQueue(Q);
QElemType e;
DeQueue(Q,e);
DeQueue(Q,e);
EnQueue(Q,8);
EnQueue(Q,10);
PrintQueue(Q);
cout << Q.front << " " << Q.rear << endl;
DestroyQueue(Q);
}