圣狄雅哥 发表于 2018-2-8 21:29:41

数据结构30讲循环队列只引入尾指针rear和队列长度length的实现算法

#define MaxQsize 10
typedef 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]
查看完整版本: 数据结构30讲循环队列只引入尾指针rear和队列长度length的实现算法