Queue

큐(Queue)는 뒤쪽으로 들어가서 앞쪽으로 나오는 자료 구조(Data Structure)이다.
스케줄링, 탐색 알고리즘 등에서 다방면으로 사용

PUSH: 큐에 데이터를 넣습니다.
POP: 큐에서 데이터를 빼냅니다.
배열을 이요한 큐
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10000
#define INF 99999999
int queue[SIZE];
int front =0;
int rear=0;
void push(int data){
if (rear>=SIZE){
printf( .\n");
return;
}
queue[rear++]=data;
}
int pop(){
if(front==rear){
printf(" .");
return -INF;
}
return queue[front++];
}
void show(){
printf("--- ---\n");
for(int i=front; i<rear;i++){
printf("%d\n",queue[i]);
}
printf("--- ---\n");
}
int main(void){
push(7);
push(5);
push(4);
pop();
push(6);
pop();
show()
system("pause");
return 0;
}
연결 리스트를 이용한 큐
#include<stdio.h>
#include<stdlib.h>
#define INF 99999999
typedef struct{
int data;
struct Node *next;
}Node;
typedef struct{
Node *front;
Node *rear;
int count;
}Queue;
void push(Queue *queue, int data){
Node *node=(Node *)malloc(sizeof(Node));
node->data=data;
node->next=NULL;
if(queue->count==0){
queue->front=node;
}
else{
queue->rear->next=node;
}
queue->rear=node;
queue->count++;
}
int pop(Queue *queue){
if(queue->count==0){
printf(" .\n");
return -INF;
}
Node *node=queue->front;
int data=node->data;
queue->front=node->next;
free(node);
queue->count--;
return data;
}
void show(Queue *queue){
Node *cur=queue->front;
printf("--- ---\n");
while(cur!=NULL){
printf("%d\n", cur->data);
cur=cur->next;
}
printf("--- ---\n");
}
int main(void){
Queue queue;
queue front=queue.rear=NULL;
queue.count=0;
push(&queue, 7);
push(&queue, 5);
push(&queue, 4);
pop(&queue);
push(&queue,6);
pop(&queue);
show(&queue);
system("pause");
return 0;
}