队列的银行问题

1. 银行问题

Que_YinHang.c

队列的银行问题_第1张图片

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
#define MAXSIZE 10
typedef bool status;
struct Que
{
	int que[MAXSIZE];
	int front;
	int rear;
};


struct Que*Que_Create()
{
	struct Que *q=(struct Que *)malloc(sizeof(struct Que));
	if(q==NULL)
	{
		return NULL;
	}
	memset(q->que,0,sizeof(q->que));
	q->front=0;
	q->rear=0;
	return q;
}
//入队
status Que_Push(struct Que *q,int data)
{
	if(q->rear==MAXSIZE)
	{
		printf("队列已满,入队失败!\n");
		return false;
	}
	q->que[q->rear]=data;
	q->rear++;
	return true;
}
//出队
status Que_Pop(struct Que *q,int *data)
{
	if(q->front==q->rear)
	{
		printf("队列为空,出队失败!\n");
		return false;
	}
	*data=q->que[q->front];
	for(int i=q->front;irear;i++)
	{
		q->que[i]=q->que[i+1];
	}
	q->rear--;
	return true;
}

int main()
{
	struct Que *A=Que_Create();
	struct Que *B=Que_Create();

	int number;//存放顾客的总数
	//存到一个数组中
	printf("请输入顾客人数:");
	scanf("%d",&number);
	printf("请输入顾客编号:");
	for(int i=0;ifront!=A->rear)
	{
		int counter=2;
		int data;
		//A出队2人
		while(counter!=0 &&A->front!=A->rear)
		{
			//A队列出队
			Que_Pop(A,&data);
			printf("%d",data);
			printf(" ");
			counter--;
		}
		//B出队1人
		if(B->front!=B->rear)
		{
			Que_Pop(B,&data);
			printf("%d",data);
			printf(" ");
		}
	}

	//程序到这B可能还有人,但是A肯定没人了,因为上面的逻辑是以A队有人为条件的
	while(B->front!=B->rear)
	{
		int data;
		Que_Pop(B,&data);
		printf("%d",data);
		printf(" ");
	}
}




你可能感兴趣的:(数据结构,数据结构,linux,c语言,算法,队列)