您的位置:首页 > 理论基础 > 数据结构算法

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

2017-03-18 23:34 239 查看
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define QElemType int
#define MAXQSIZE 6
using 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐