선형 큐 (연결리스트로 구현)

선형 큐 (연결리스트로 구현)

연결리스트로 선형 큐를 구현하므로 크기에 제약이 없어 큐가 꽉 찼는지 검사할 필요가 없으므로 full() 함수가 필요가 없다. 선형 큐의 기본적인 설명은 '선형 큐 (구조체로 구현)'에서 설명했으므로 생략하겠다. 바로 코드!

#include #include #include typedef struct Node //노드 정의 { int data; struct Node *next; }Node; typedef struct Queue //Queue 구조체 정의 { Node *front; //맨 앞(꺼낼 위치) Node *rear; //맨 뒤(보관할 위치) int count; }Queue; void InitQueue(Queue *queue) { queue->front = NULL; queue->rear = NULL; //front와 rear를 NULL로 설정 queue->count = 0; } int empty(Queue *queue) //front와 rear가 직접 움직이는 것이 아니므로 { return queue->count == 0; //queue->front == queue->rear; 로 확인이 불가능. } void enqueue(Queue *queue, int data) { Node *now = (Node *)malloc(sizeof(Node)); now->data = data; now->next = NULL; if (empty(queue)) queue->front = now;//비어있으면 맨 앞을 now로 설정 else queue->rear->next = now;//안 비어있으면 맨 뒤의 다음을 now로 설정 queue->rear = now;//맨 뒤를 now로 설정 queue->count++; } int dequeue(Queue *queue) { int re = -1; if (empty(queue))//큐가 비었을 때 return re; Node *now = queue->front;//맨 앞의 노드를 now에 저장 re = now->data;//반환할 값은 now의 data로 설정 queue->front = now->next;//맨 앞은 now의 다음 노드로 설정 free(now);//now 소멸 queue->count--; return re; } int main(void) { Queue *queue = (Queue*)malloc(sizeof(Queue)); InitQueue(queue); char Get_Com[10]; int N,pushnum; scanf("%d",&N;); for(int i=0;i

",dequeue(queue)); else if(strcmp(Get_Com,"empty")==0) printf("%d

",empty(queue)); } return 0; }

from http://coding-doomchicken.tistory.com/18 by ccl(A) rewrite - 2021-12-29 16:26:29