유진 2019. 5. 13. 16:14
반응형

 

#include<stdio.h>
#include<sidlib.h>
#define MAX_SIZE 10  

// 큐를 구조체로 선언  
typedef int element;  
typedef struct{  
  element queue[MAX_SIZE];  
  int front, rear;  
 } QueueType;  

// 포화 상태, 공백상태 error 처리  
void error(char *message){  
  fprintf(stderr,"%s\n",message);  
  exit(1);  
}   

// 초기화 함수  
void init(QueueType *q){                                                                                
  q->front = q->rear = 0;  
}    

// 삽입함수   
void enqueue(QueueType *q, element item){  
  if((q->rear+1)%MAX_SIZE == q->front)  
  	error("큐가 포화 상태입니다");  
  q->rear = (q->rear+1) % MAX_SIZE;  
  q->queue[q->rear] = item;  
}  

//삭제 함수  
element dequeue(QueueType *q){  
  if(q->front == q->rear)  
  	error("큐가 공백 상태입니다");  
  q->front = (q->front + 1)%MAX_SIZE;  
  return q->queue[q->front];  
}  
int main() {  
  QueueType q;  
  init(&q); //item이 queue인데 q안에 queue 안에 배열 item = q.queue[q.front]  
  printf("\nitem=%d\n",q.queue[q.front]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear);  
  enqueue(&q,99); 
  printf("\nitem=%d\n",q.queue[q.front+1]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
  enqueue(&q,88); 
  enqueue(&q,77); 
  enqueue(&q,66); 
  printf("\nitem=%d\n",q.queue[q.rear]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
  enqueue(&q,55); 
  enqueue(&q,44); 
  enqueue(&q,33); 
  enqueue(&q,22); 
  enqueue(&q,11); 
  printf("\nitem=%d\n",q.queue[q.rear]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
  dequeue(&q); 
  printf("\nitem=%d\n",q.queue[q.front]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
  enqueue(&q,98); 
  printf("\nitem=%d\n",q.queue[q.rear]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  dequeue(&q); 
  printf("\nitem=%d\n",q.queue[q.front]);  
  printf("front=%d\n",q.front);  
  printf("rear=%d\n",q.rear); 
} 
/* 

item=1 
front=0 
rear=0 

item=99 
front=0 
rear=1 

item=66 
front=0 
rear=4 

item=11 
front=0 
rear=9 

item=99 
front=1 
rear=9 

item=98 
front=1 
rear=0 

item=98 
front=0 
rear=0 

-------------------------------- 
Process exited after 0.02195 seconds with return value 7 
계속하려면 아무 키나 누르십시오 . . . 
*/
반응형