队列(约瑟夫环)

来源:互联网 发布:手机购物安全软件 编辑:程序博客网 时间:2024/06/10 23:44
/**创建队列 *使用约瑟夫环 *编号为1、2、3…n的n个小朋友按顺时针方向围坐一圈,*若从1号小朋友开始按顺时针方向从1顺序报数,报m的小朋友则出列,*然后从他在顺时针方向的下一位开始,继续从1开始报数,报m者出列,*如此下去,直到所有的小朋友均出列为止。*试设计一程序,输出出列小朋友编号的序列。*/#include "stdio.h"#define MAXQSIZE 100#define TRUE 1#define OK 1#define FALSE 0#define OVERFLOW 0typedef struct{    int  elem[MAXQSIZE];   int front;     //队头指针int rear;      //队尾指针}SeQueue;void Init_SeQueue(SeQueue *sq){   //初始化队列;sq->front = sq->rear = 0;}int Empty_SeQueue(SeQueue *sq){    //判断队列空;if(sq->front == sq->rear)return TRUE;return FALSE;}int In_SeQueue(SeQueue *sq, int x){//入队;if(((sq->rear + 1)%MAXQSIZE) == sq->front )return 0;else{sq->elem[sq->rear] = x;sq->rear = (sq->rear + 1) % MAXQSIZE;return OK;}}int  Out_SeQueue (SeQueue *sq, int *y){//出队;if( Empty_SeQueue(sq))return FALSE;*y = sq->elem[sq->front];sq->front = (sq->front+1)% MAXQSIZE;return OK;}main(){   //编写代码;int m, n,count = 0;SeQueue sq;Init_SeQueue(&sq);printf("入队:\n");scanf("%d%d",&n, &m);int i = 0;for(i; i < n; i++){In_SeQueue(&sq,i);}while(Empty_SeQueue(&sq) != 1){Out_SeQueue(&sq,&i);if(count  == m){printf("%d ",i);count = 0;}elseIn_SeQueue(&sq,i);count++;}return 0;}

0 0
原创粉丝点击