循环队列的实现

#include<stdio.h>
#define size 10  //最大队列长度,实际上只能存入(size-1)个数据
typedef char DataType;
//循环队列可以解决顺序队列的假满现象
//循环队列的类型定义
typedef struct 
{
	DataType data[size];//存储队列的数据空间
	int front,rear;//队头和队尾指针
}circleQueue;

//初始化队列
void init(circleQueue * q)
{
	q->front=q->rear=0;
}

//判断队列是否为空
int isEmpty(circleQueue *s)
{
	return s->front==s->rear;
}

//判断队列是否为满
int isFull(circleQueue *q)
{
	return (q->rear+1)%size==q->front;
}

//元素入队,rear所指的单元始终未空
void inQueue(circleQueue *q,DataType e)
{
	if(isFull(q))
	{
		printf("Over Flow !");
	}
	else
	{
		q->data[q->rear]=e;
		q->rear=(q->rear+1)%size;//队尾指针上移一位
	}
}

//元素出队
DataType outQueue(circleQueue *q)
{
	DataType x;
	if(isEmpty(q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		x=q->data[q->front];
	    q->front=(q->front+1)%size;//队头指针上移一位
		return x;
	}
}

//打印队列
void printQueue(circleQueue q)
{
	while(q.front!=q.rear)
	{
		printf("%c ",q.data[q.front]);
		q.front=(q.front+1)%size;
	}
	printf("\n");
}

//取得队头元素
DataType getFirst(circleQueue q)
{
	if(isEmpty(&q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		return q.data[q.front];
	}
}
void main()
{
	circleQueue q;
	DataType c;
	init(&q);
	while((c=getchar())!='\n')
	{
		inQueue(&q,c);
	}
	printf("出队顺序为:");
	printQueue(q);

	outQueue(&q);
	printf("出队顺序为:");
	printQueue(q);

	printf("队头元素为:%c",getFirst(q));
	printf("\n");
}

你可能感兴趣的:(数据结构)