循环队列实现(通过设置标志位tag位判断空队满队)

来源:互联网 发布:魅族系统升级清除数据 编辑:程序博客网 时间:2024/05/22 01:58


#include <iostream>#include <stdlib.h>#include <stdio.h>#define OK 1#define ERROR 0#define OVERFLOW 0#define QElemType int#define MAXQSIZE 6using namespace std;typedef struct{    QElemType *base;    int qFront;    int qRear;    int tag = 0;} SqQueue;//初始化int init_queue(SqQueue &sq){    sq.base = (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));    if(!sq.base)    {        exit(OVERFLOW);    }    sq.qFront = sq.qRear = 0;    return OK;}//队列长度int length_queue(SqQueue sq){    if(sq.tag == 1)    {        return MAXQSIZE;    }    return (sq.qRear - sq.qFront + MAXQSIZE)%MAXQSIZE;}//进队列int en_queue(SqQueue &sq,QElemType e){    if(length_queue(sq)==MAXQSIZE)    {        return ERROR;    }    sq.base[sq.qRear] = e;    sq.qRear = (sq.qRear+1)%MAXQSIZE;    if(sq.qFront == sq.qRear&&sq.tag == 0)    {        sq.tag = 1;    }    return OK;}//出队列int de_queue(SqQueue &sq,QElemType &e){    if(length_queue(sq)==0)    {        return ERROR;    }    e = sq.base[sq.qFront];    sq.qFront = (sq.qFront+1)%MAXQSIZE;    sq.tag = 0;    return OK;}int main(){    SqQueue sq;    init_queue(sq);    QElemType e=1;    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    en_queue(sq,e);    cout<<length_queue(sq)<<endl;    QElemType e1 = 0;    de_queue(sq,e1);    cout<<e1<<endl;    cout<<length_queue(sq)<<endl;}


0 0
原创粉丝点击