数据结构循环队列的基本操作,初始化队,入队,出队,读取队头元素,判断队空;

入队:队尾指针加1取模,Q.rear=(Q.rear+1)%MaxSize;

出队:队头指针加1取模,Q.front=(Q.front+1)%MaxSize;

入队:队尾指针加1取模,Q.rear = (Q.rear + 1) % MaxSize;

队满:队尾指针加1取模等于队头指针,(Q.rear + 1) % MaxSize=Q.front;

队空:Q.front=Q.rear;

队中元素个数:(Q.rear-Q.front+MaxSize)%MaxSize;

***front指向的是队头元素,而rear指向的是队尾元素后的位置,为空;

代码段:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
#define MaxSize 50//定义队列的最大长长度度
#define ElemType int//把int命名为ElemType
typedef struct
{
	ElemType data[MaxSize];//存放队列元素
	int front,rear;            //队头指针,队尾指针
}SqQueue;

void InitQueue(SqQueue& Q)//初始化队
{
	Q.front = Q.rear = 0;//初始化队头队尾指针指向0
}

bool EmptyQueue(SqQueue Q)//判断队空
{
	if (Q.front == Q.rear)  //队空
		return true;
	else
		return false;

}

bool EnQueue(SqQueue& Q, ElemType x)//入队操作
{
	if ((Q.rear + 1) % MaxSize == Q.front)//队满报错
		return false;
	else
	{
		Q.data[Q.rear] = x;//入队
		Q.rear = (Q.rear + 1) % MaxSize;//队尾指针加1取模
		return true;
	}
}

bool DeQueue(SqQueue& Q, ElemType& x)//出队
{
	if (Q.front == Q.rear)//队空报错
		return false;
	else
	{
		x = Q.data[Q.front];//读取队头元素
		Q.front = (Q.front + 1) % MaxSize;//队头指针加1取模
		return true;
	}
}
void GetQueue(SqQueue Q)//读取队头元素
{
	if (Q.front == Q.rear)
		printf("队空!\n");
	else
	{
		printf("队头元素:%d", Q.data[Q.front]);
		printf("\n");
	}
}
int main()
{
	SqQueue Q;
	while (1)
	{
		printf("\n\n**********请输入接下来的操作:********\n");
		printf("1:初始化队\n");
		printf("2:入队\n");
		printf("3:出队\n");
		printf("4:读取队头元素\n");
		printf("5:判断队空\n");
		printf("-1:退出\n\n");
		int count = 0;
		ElemType x1 = 0, x2 = 0;
		printf("操作:");
		scanf_s("%d", &count);
		if (count == -1)
			break;
		switch (count)
		{
		case 1:
			InitQueue(Q);
			break;
		case 2:
			printf("请输入入队元素:");
			scanf_s("%d", &x1);
			EnQueue(Q, x1);
			break;
		case 3:
			DeQueue(Q, x2);
			printf("出队元素为:%d", x2);
			break;
		case 4:
			GetQueue(Q);
			break;
		case 5:
			bool a;
			a=EmptyQueue(Q);
			if (a == false)
				printf("队不为空!\n");
			else
				printf("队空!\n");
			break;
		}

	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值