数据结构30讲循环队列实现的另一种方法(以标志域tag的0与1判断队列是空还是满)
本帖最后由 圣狄雅哥 于 2018-2-8 21:13 编辑#define MaxQsize 10
typedef int Status
typedef int ElemType;
typedef struct{
ElemType *base;
int front;
int rear;
Status tag;
}Queue;
Status InitQueue(Queue*q)
{
q->base=(ElemType*)malloc(MaxQsize*sizeof(ElemType));
if(!q->base) return FALSE;
q->front=q->rear=0;
q->tag=0;
return OK;
}
Status EnQueue(Queue *q,ElemType e)
{
if(q->front==q->rear&&q->tag) return FALSE;
else{
q->base=e;
q->rear=(q->rear+1)%MaxQsize;
if(q->rear==q->front)
q->tag=1;
}
return OK;
}
Status DeQueue(Queue *q,ElemType *e)
{
if(q->front==q->rear&&!q-.tag) return FALSE;
else{
*e=q->base;
q->front=(q->front+1)%MaxQsize;
if(q->front==q->rear)
q->tag=0;
}
return OK;
} 小甲鱼视频教程里面的那个队列“满”时其实还有一个存储空间没有利用,这段代码通过引入tag标志来节省存储空间,但运行时间稍微加长了。
页:
[1]