数据结构-循环队列的基本实现操作

版权声明:欢迎分享(指明出处),若有错误还请指正!!! https://blog.csdn.net/zj19941201/article/details/71242141
/*main*/
#include<stdio.h>
#include<stdlib.h>
#define TRUE		1
#define ERROR		0
#define FALSE		0
#define OK			1
#define OVERFLOW	-2
#define	MAXSIZE		20
typedef int Status;
typedef int QElemtype;
typedef struct{
	QElemtype	*base;
	int front;
	int rear;	
}SqQueue;
#include"xhdl.h"
main()
{
	SqQueue Q;
	Init(Q);
	int cnt=1,k;
	while(cnt<11)
	{
		EnQueue(Q,cnt);
		cnt++;
	} 
	printf("循环队列中元素:");
	print(Q);
	putchar(10);
	printf("队列此时长度:%d",QueueLength(Q));
	putchar(10);
	printf("出队元素:");
	for(int i=0;i<2;i++)
	printf("%d ",DeQueue(Q,k));
	putchar(10);
	printf("循环队列中元素:");
	print(Q);
	putchar(10);
	printf("队列此时长度:%d",QueueLength(Q));
	return OK;
}
/*xhdl*/
Status	Init(SqQueue &Q)
{
	Q.base=(int *)malloc(MAXSIZE*sizeof(int));
	if(!Q.base)exit(OVERFLOW);
	Q.front=Q.rear=0;
	return OK; 
}

Status EnQueue(SqQueue &Q,QElemtype e)
{
	if((Q.rear+1)%MAXSIZE==Q.front)return ERROR;//队列满的判定条件; 
	Q.base[Q.rear]=e;
	Q.rear=(Q.rear+1)%MAXSIZE;
	return OK; 
}

Status QueueLength(SqQueue Q)
{
	return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}

Status DeQueue(SqQueue &Q,int &e)
{
	if(Q.front==Q.rear)return ERROR;//队列空的判定条件;
	e=Q.base[Q.front];
	Q.front=(Q.front+1)%MAXSIZE;
	return e; 
}

Status print(SqQueue &Q)
{
	if(Q.front==Q.rear)
	{	
		printf("队列为空"); 
		return ERROR;
	}
	int i=Q.front;
	if(Q.front<Q.rear){
		while(i<Q.rear)
		{
		printf("%d ",Q.base[i]);
		i++;
		}
	}else{
		while(i<=MAXSIZE)
		{
		printf("%d ",Q.base[i]);
		i++;
		}
		int j=0;
		while(j<Q.rear) 
		{
		printf("%d ",Q.base[j]);	
		j++;		
		}
	}	
}

猜你喜欢

转载自blog.csdn.net/zj19941201/article/details/71242141