[c언어] 큐와 스택의 차이
1. 큐와 스택 |
2. 큐 |
3. 스택 |
큐와 스택
큐(Queue)와 스택(Stack)은 데이터를 저장하고 검색하는 데 사용되는 자료 구조입니다. 이 둘은 데이터의 삽입과 삭제가 어떻게 이루어지느냐에 따라 구분됩니다.
큐
큐는 FIFO(First In, First Out) 방식으로 동작합니다. 즉, 먼저 들어온 데이터가 먼저 나가는 방식을 채택하고 있습니다. 큐는 줄 서는 것과 유사한 구조를 가지고 있어, 가장 먼저 온 사람이 먼저 퇴장하는 구조입니다.
예를 들어, 인쇄 대기열, 버퍼 등이 큐의 예시로 볼 수 있습니다.
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int arr[MAX_SIZE];
int front;
int rear;
} Queue;
void enqueue(Queue *q, int data) {
if (q->rear == MAX_SIZE - 1) {
printf("Queue is full\n");
} else {
q->arr[++(q->rear)] = data;
}
}
int dequeue(Queue *q) {
if (q->front > q->rear) {
printf("Queue is empty\n");
return -1;
} else {
return q->arr[(q->front)++];
}
}
스택
스택은 LIFO(Last In, First Out) 방식으로 동작합니다. 이는 나중에 들어온 데이터가 먼저 나가는 구조를 뜻합니다. 스택은 책을 쌓는 것과 유사한 구조를 가지고 있어, 맨 위에 있는 책부터 차례로 꺼내야 합니다.
예를 들어, 함수 호출 시의 메모리 구조, 웹 브라우저의 뒤로 가기 버튼 등이 스택의 예시로 볼 수 있습니다.
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int arr[MAX_SIZE];
int top;
} Stack;
void push(Stack *s, int data) {
if (s->top == MAX_SIZE - 1) {
printf("Stack overflow\n");
} else {
s->arr[++(s->top)] = data;
}
}
int pop(Stack *s) {
if (s->top < 0) {
printf("Stack underflow\n");
return -1;
} else {
return s->arr[(s->top)--];
}
}
큐와 스택은 각각의 구조와 데이터 처리 방식에 따라 다르게 활용됩니다. 알맞은 상황에 적합한 자료 구조를 선택하여 사용하는 것이 중요합니다.