循环队列

#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#define MAXSIZE 10;
#define OK 1;
#define ERROR 0;
#define OVERFLOW 0;

typedef struct
{
	int *data;
  	int front ;
  	int rear;
}SqQueue;
int InitQueue_Sq(SqQueue &Q)
{
    Q.data=(int*)malloc(10*sizeof(int));
	if(!Q.data)
		exit(0);
	Q.front=Q.rear=0;
	return OK;
}
int EnQueue_Sq(SqQueue &Q,int e)
{
	if((Q.rear+1)%10==Q.front)
		return ERROR;
	Q.data[Q.rear]=e;
	Q.rear=(Q.rear+1)%10;
	return OK;
}
void IfEmpty(SqQueue Q)
{
	if(Q.rear==Q.front)
		printf("该循环队列是空队列\n");
	else
		printf("该循环队列不是空队列\n");
}
void IfFull(SqQueue Q)
{
	if((Q.rear+1)%10==Q.front)
		printf("该循环队列已满\n");
	else
		printf("该循环队列未满\n");
}
void InQueue_Sq(SqQueue &Q,int  e)
{
	if((Q.rear+1)%10==Q.front)
		printf("循环队列已满\n");
	else
	{
    	Q.data[Q.rear]=e;
    	Q.rear=(Q.rear+1)%10;
    	printf("元素%d成功进入循环队列\n",e);
	}
}
void DeQueue_Sq(SqQueue &Q)
{
	int e;
	if(Q.front==Q.rear)
		printf("循环队列为空\n");
	e=Q.data[Q.front];
	printf("循环队列队首元素是:%d\n",e);
}
void DE_Sq(SqQueue &Q)
{
	int *w;
	w=&Q.data[Q.front];
	Q.front=Q.front+1;
	printf("队首元数%d删除成功\n",*w);
}
int Length_Sq(SqQueue &Q)
{
	int s;
    s=(Q.rear-Q.front+10);
	return s%10;
}

int OutQueue_Sq(SqQueue Q)
{
	SqQueue p;
	p=Q;
	int i,n;
	n=Length_Sq(p);
	for(i=0;i<n;i++)
	{
		printf("%d",p.data[p.front]);
		p.front++;
	}
	return OK;
}
void Delet(SqQueue &Q)
{
	free(Q.data);
	printf("释放成功");
}

int main()
{
	system("cls");
	printf("**********************循环队列功能菜单***********************\n");
	printf("1.初始化队列输入的数不超过10个,2.判断队列是否空,3.判断队列是否满,     \n");
	printf("4.将元素入队,                  5.取队列首元素,  6.队列的长度,   7.遍历循环队列,\n");
	printf("8.删除队首元素,                9.释放队列,      10.清屏,        0.结束程序,\n");
	int flag=1,i;
	SqQueue Q;
	InitQueue_Sq(Q);
	while (flag)
	{
		printf("请输入操作符:");
		scanf("%d",&i);
		switch(i)
		{
		case 1:
			int n,j,m;
			printf("请输入初始化元素的个数:");
			scanf("%d",&n);
			printf("请输入元素:");
			for(j=0;j<n;j++)
			{
				scanf("%d",&m);
				EnQueue_Sq(Q,m);
			}
			break;
		case 2:
			IfEmpty(Q);
			break;
		case 3:
			IfFull(Q);
			break;
		case 4:
			int k;
			printf("请输入要进入循环队列的元素:");
			scanf("%d",&k);
			InQueue_Sq(Q,k);
			break;
		case 5:
			DeQueue_Sq(Q);
			break;
		case 6:
			int f;
			f=Length_Sq(Q);
			printf("该循环队列的长度为:%d\n",f);
			break;
		case 7:
			printf("该循环队列为:");
			OutQueue_Sq(Q);
			printf("\n");
			break;
		case 8:
			DE_Sq(Q);
			break;
		case 9:
			Delet(Q);
			break;
		case 10:
			system("cls");
			break;
        case 0:
			flag=0;
			break;

		}
	}
	printf("程序结束");
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值