데이터 구조 - 순환 대기 열 로 조세 프 문제 해결 (순수 c)

#ifndef __JOSEPHUS_H__
#define __JOSEPHUS_H__
#include 
#include 
#include 
typedef int QElemType;

typedef struct{
   QElemType *base;   //           
   int front;      //   ,         
   int rear;       //   ,         
   
}squeue;
void InitQueue(squeue *q);
int  inqueue(squeue *q,int e,int max);
int  dequeue(squeue *q,int max);
void  DesQueue(squeue *q);


#endif 

헤더 파일
#include "josephus.h"
//   
void InitQueue(squeue *q){
    q->base=(QElemType*)malloc(100*sizeof(QElemType));
	if(!q->base)
		exit(1);
	q->front=q->rear=0;	

}


//  
int  inqueue(squeue *q,int e,int max)
{
 if((q->rear+1)%(max+1)==q->front) 
	 return  1;
 q->base[q->rear]=e;     //         rear
 q->rear=(q->rear+1)%(max+1);
 return 0;
 }

//  
int  dequeue(squeue *q,int max)
{
   int e;
   if(q->front==q->rear)
   {
   exit(1);   
   }
   e=q->base[q->front];
   q->base[q->front]=0;
   q->front=(q->front+1)%max;
  return e;
}

//  
void  DesQueue(squeue *q)
{  if(q->base)
      free(q->base);
   q->base=NULL;
  q->front=q->rear=0;
}


함수 체. c 파일
#include "josephus.h"
void main()
{
  int n,i,m,count,d,x;
  squeue q;

 printf("       n:");
 scanf("%d",&n);
 InitQueue(&q);
 printf("       :
"); for(i=1;i<=n;i++) { printf(" %d ",i); scanf("%d",&d); inqueue(&q,d,n); } printf(" m :"); scanf("%d",&m); count=n; while(count!=1) { i=1; while(i!=m) { q.front=(q.front+1)%n; if(q.base[q.front]!=0) { i++; } } x=dequeue(&q,n); while(q.base[q.front]==0) { q.front=(q.front+1)%n; } printf(" %d\t",x); count--; } x=dequeue(&q,n); printf(" %d\t",x); }

주 함수

좋은 웹페이지 즐겨찾기