2012년 9월 29일 토요일

[C] queue


#define QUEUESIZE 256 //size변경하면서 테스트 해볼 것
#define TRUE 1
#define FALSE 0


typedef struct{
  int q[QUEUESIZE+1];
  int first;
  int last;
  int count;
} queue;

/*큐에 대한 함수(circular queue)*/
void init_queue(queue *q) //큐 초기화
{
  q->first = 0;
  q->last = QUEUESIZE-1;
  q->count = 0;
}

void enqueue(queue *q, int x) //큐에 값을 저장하는 함수
{
  if (q->count >= QUEUESIZE)
    printf("Warning: queue overflow enqueue x=%d\n", x);
  else{
    q->last = (q->last+1) % QUEUESIZE;
    q->q[ q->last ] = x;
    q->count = q->count+1;
  }
}

int dequeue(queue *q) //큐에서 값을 빼오는 함수
{
  int x;

  if(q->count <= 0) printf("Warning: empty queue dequeue.\n");
  else{
    x = q->q[ q->first ];
    q->first = (q->first+1) % QUEUESIZE;
    q->count = q->count - 1;
  }

  return(x);
}

int empty(queue *q) //큐가 비었는지 확인하는 함수, 비었으면 TRUE리턴
{
  if(q->count <= 0) return(TRUE);
  else return(FALSE);
}
/*큐에 대한 함수 끝*/

댓글 없음:

댓글 쓰기