循环队列实现(通过设置标志位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;
}
#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;
}
相关文章推荐
- 通过设置标志位tag判断队空队满的循环队列
- 要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法
- 通过队列实现判断一棵二叉树是否为完全二叉树
- 原创:如何实现在Excel通过循环语句设置指定行的格式
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- 循环队列的判断满、空的三种方法以及具体代码实现(数组实现)
- 两种方法实现队满和队空的判断操作(循环队列)
- 通过共享内存,利用循环队列实现两个进程A,B之间的通信
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- 如何实现一个循环队列
- 如何通过存储过程实现记录集的循环
- 循环队列的数组表示函数的实现
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 如何实现一个循环队列
- 如何实现一个循环队列
- 如何实现一个循环队列
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- 通过设置p3p头来实现跨域访问cookie