约瑟夫环 (队列实现)

#include "stdio.h"
#include<stdlib.h>
#define MAXQSIZE 100
#define TRUE 1
#define OK 1
#define FALSE 0
#define OVERFLOW 0

typedef struct{
    int  *elem;   
int front;     //队头指针
int rear;      //队尾指针
}SeQueue;

void Init_SeQueue(SeQueue *sq)
{
    sq->elem = (int*)malloc(MAXQSIZE * sizeof(int));
	sq->front=sq->rear=0;
 }
int Empty_SeQueue(SeQueue *sq)
{
	return sq->front == sq->rear;
}
int In_SeQueue(SeQueue *sq, int x)
{
	if ((sq->rear+1)%MAXQSIZE == sq->front)
	{
		printf("队满");
		return 0;
	}
	sq->elem[sq->rear] = x;
	sq->rear = (sq->rear+1)%MAXQSIZE;
	return 1;
}
int  Out_SeQueue (SeQueue *sq, int *y)
{
	if (Empty_SeQueue(sq))
	{
		printf("队空");
		return 0;
	}
	*y = sq->elem[sq->front];
	sq->front = (sq->front+1)%MAXQSIZE;
	return 1;
}

main()
{
	SeQueue sq;
	int i,j,k,y,n,m,cnt=0;
	Init_SeQueue(&sq);
	scanf("%d%d",&n,&m);
	for (i=1; i<=n; i++)
	{
		In_SeQueue(&sq, i);
	}
	while(!Empty_SeQueue(&sq))
	{
		cnt++;
		if (cnt != m)
		{
			Out_SeQueue(&sq, &y);
			In_SeQueue(&sq, y);
		}
		else
		{
			Out_SeQueue(&sq, &y);
			printf("%d",y);
			cnt=0;
		}
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值