循环队列用标志位判断队满C实现

数据结构:

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;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容