数据结构:
struct { //定义队列结构
ElemType data[Maxsize];
int rear, front;
int tag = 0;
} SqQueue;
好多书上都只写了留一个空间来判断队满队空:
队满:( Q->rear + Maxsize ) % Maxsize == Q->front
队空:Q->rear == Q->front
下面用标志位来实现:
//入队
int EnQueue( SqQueue *Q, ElemType x ){
if ( Q->rear == Q->front && Q->tag == 1) return 0; //队满返回0
Q->data[ Q->rear] = x;
Q->rear = ( Q->rear + 1 ) % Maxsize;
Q->tag = 1; //入队后修改tag为1
return 1;
}
//出队
int DeQueue( SqQueue *Q, ElemType *x ){
if ( Q->rear == Q->front && Q->tag == 0) return -1; //队空返回-1
*x = Q->data[ Q->front] ;
Q->front= ( Q->front +1 ) % Maxsize;
Q->tag = 0; //出队后修改tag为0
return 1;
}