顺序表示的队列——顺序队列2——假溢出

要求顺序循环队列不损失一个空间全部能够得到有效利用,请采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法。
考察循环队列入队和出队算法思想。设置标志位tag,初始时tag=0,当元素入队成功,令tag=1;出队成功令tag-0。则队列为空的判定条件为front==rear&&tag==0;队列满的判断条件为front==rear&&tag==1.

main.cpp

#include 
#define QUEUESIZE 100
#define MAXSIZE 100
#include 
#include 
using namespace std;
typedef int DataType;
typedef struct Squeue
{
	DataType queue[QUEUESIZE];
	int front, rear;
	int tag;
}SCQueue;
void PrintData(DataType e);
int CheckType(DataType e);
void InitQueue(SCQueue *SCQ)
{
	SCQ->front = SCQ->rear = 0;
	SCQ->tag = 0;
}
int QueueEmpty(SCQueue SCQ)
{
	if (SCQ.front==SCQ.rear&&SCQ.tag==0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int EnQueue(SCQueue *SCQ, DataType e)
{
	if (SCQ->front==SCQ->rear&&SCQ->tag==1)
	{
		cout << "队列已满,不能入队!";
		return 0;
	}
	else
	{
		SCQ->queue[SCQ->rear] = e;
		SCQ->rear = SCQ->rear + 1;
		SCQ->tag = 1;
		return 1;
	}
}

int DeQueue(SCQueue *SCQ, DataType *e)
{
	if (QueueEmpty(*SCQ))
	{
		cout << "循环队列已是空队列,不能再进行出队操作!";
		return 0;
	}
	else
	{
		*e = SCQ->queue[SCQ->front];
		SCQ->front = SCQ->front + 1;
		SCQ->tag = 0;
		return 1;
	}
}

void DisplayQueue(SCQueue SCQ)
{
	int i;
	if (QueueEmpty(SCQ))
	{
		return;

	}
	if (SCQ.front1e-6)
	{
		return 3;//浮点数
	}
	if (e>='A'&&e<='Z'|| e >= 'a'&&e <= 'z')
	{
		return 1;//字符型
	}
	else
	{
		return 2;//整型
	}
}

结果:

顺序表示的队列——顺序队列2——假溢出_第1张图片

你可能感兴趣的:(数据结构与算法,顺序队列,循环顺序队列,数据结构与算法)