[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)--];
    }
}

큐와 스택은 각각의 구조와 데이터 처리 방식에 따라 다르게 활용됩니다. 알맞은 상황에 적합한 자료 구조를 선택하여 사용하는 것이 중요합니다.