循环队列
循环队列,要求头指针和尾指针对队列空值和队列满的判断,全部有关的代码,谢谢
[解决办法]
// 循环队列.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#define MAXSIZE 8
#define ElemType char
//循环队列存储类型
typedef struct{
ElemType elem[MAXSIZE]; //数据元素
int front,rear; //队首,队尾指针
}SeqQueue;
//初始化:为未初始化的循环队列Q设置队首和队尾指针
void InitQueue(SeqQueue &Q)
{
Q.front=Q.rear=0; //空队列Q
}//InitQueue
//判队空:判断循环队列Q是否为空队列
int IsEmpty(SeqQueue &Q)
{
if(Q.rear==Q.front)
return 1;
else
return 0;
}//IsEmpty
//判队满:判循环队列Q是否为满
int IsFull(SeqQueue &Q)
{
if((Q.rear+1)%MAXSIZE==Q.front)
return 1;
else
return 0;
}//IsEmpty
//入队:向循环队列Q的队尾插入一个数据元素
int InQueue(SeqQueue &Q,ElemType e)
{
if(IsFull(Q))
{
printf("队列已经满!\n");
return 0; //当前存储空间已满
}
Q.elem[Q.rear]=e; //插入数据元素x
Q.rear=(Q.rear+1)%MAXSIZE;
return 1;
}//InQueue
//出队:删除循环队列Q的队首元素,并用e返回
int OutQueue(SeqQueue &Q,ElemType &e)
{
if(IsEmpty(Q))
{
printf("队列中不存在元素");
return 0; //空队列
}
e=Q.elem[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return 1;
}//OutQueue
//打印队列
int PriQueue(SeqQueue Q)
{
int i=0;
int p;
if(IsEmpty(Q))
{
printf("队列中不存在元素");
return 0; //空队列
}
p=Q.front;
printf("Q(");
while(p!=Q.rear)
{
printf("%c ",Q.elem[p++]);
}
printf(")");
return 1;
}
int QueueLength(SeqQueue Q)
{
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int main()
{
char e;
SeqQueue Q;
InitQueue(Q);
InQueue(Q,'a');
InQueue(Q,'b');
InQueue(Q,'c');
PriQueue(Q);
printf("\n队列的长度为:%d ",QueueLength(Q));
OutQueue(Q,e);
printf("%c",e);
printf("\n队列的长度为:%d ",QueueLength(Q));
return 0;
}