数据结构30讲循环队列只引入尾指针rear和队列长度length的实现算法
#define MaxQsize 10typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *base;
int rear;
int length;
}Queue;
Status InitQueue(Queue *q)
{
q->base=(ElemType*)malloc(MaxQsize*sizeof(ElemType));
if(!q->base) return FALSE;
q->rear=0;
q->length=0;
return OK;
}
Status EnQueue(Queue*q,ElemType e)
{
if((q->rear+1)%MaxQsize==(q->rear+MaxQsize-q->length)%MaxQsize)
//(q->rear+MaxQsize-q->length)%MaxQsize 正好是队列中存储的第一个数据的下标,及头指针的位置
return FALSE;
else{
q->base=e;
q->rear=(q->rear+1)%MaxQsize;
q->length++;
}
return OK;
}
Status DeQueue(Queue*q,ElenType*e)
{
if((q->rear+MaxQsize-q->Length)%MaxQsize==q->rear;)
return FALSE;
else{
*e=q->base[(q->rear+MaxQsize-q->length)%MaxQsize];
q->length--;
}
return OK;
}
页:
[1]