CS/자료구조

자료구조 C언어 데크(Deque, Double-ended Queue) 예제

컨설턴트X 2023. 5. 4. 13:38
728x90
반응형

C 언어로 구현한 데크(Deque, Double-ended Queue) 예제입니다. 데크는 큐(Queue)와 유사한 자료구조로, 양쪽 끝에서 삽입과 삭제가 가능합니다.

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 데크의 최대 크기

int deque[MAX_SIZE];
int front = 0, rear = 0; // 데크의 앞과 뒤를 가리키는 포인터

// 데크가 비어있는지 확인하는 함수
int is_empty() {
    return front == rear;
}

// 데크가 가득 차있는지 확인하는 함수
int is_full() {
    return (rear + 1) % MAX_SIZE == front;
}

// 데크의 앞에서부터 데이터를 삭제하고 반환하는 함수
int dequeue_front() {
    if (is_empty()) {
        printf("Deque is empty.\n");
        return -1;
    }
    int data = deque[front];
    front = (front + 1) % MAX_SIZE;
    return data;
}

// 데크의 뒤에서부터 데이터를 삭제하고 반환하는 함수
int dequeue_rear() {
    if (is_empty()) {
        printf("Deque is empty.\n");
        return -1;
    }
    rear = (rear - 1 + MAX_SIZE) % MAX_SIZE;
    int data = deque[rear];
    return data;
}

// 데크의 앞에서부터 데이터를 추가하는 함수
void enqueue_front(int data) {
    if (is_full()) {
        printf("Deque is full.\n");
        return;
    }
    front = (front - 1 + MAX_SIZE) % MAX_SIZE;
    deque[front] = data;
}

// 데크의 뒤에서부터 데이터를 추가하는 함수
void enqueue_rear(int data) {
    if (is_full()) {
        printf("Deque is full.\n");
        return;
    }
    deque[rear] = data;
    rear = (rear + 1) % MAX_SIZE;
}

// 데크의 모든 데이터를 출력하는 함수
void print_deque() {
    printf("Deque: ");
    int i = front;
    while (i != rear) {
        printf("%d ", deque[i]);
        i = (i + 1) % MAX_SIZE;
    }
    printf("\n");
}

int main() {
    enqueue_rear(1);
    enqueue_rear(2);
    enqueue_front(3);
    enqueue_front(4);
    print_deque();
    printf("Dequeued data (front): %d\n", dequeue_front());
    printf("Dequeued data (rear): %d\n", dequeue_rear());
    print_deque();
    return 0;
}




위 예제에서는 배열을 이용하여 데크를 구현하였습니다. `front`와 `rear`는 각각 데크의 앞과 뒤를 가리키는 포인터입니다. `enqueue_front` 함수는 데이터를 데크의 앞에 추가하고, `enqueue_rear` 함수는 데크의 뒤에 추가합니다.

728x90
반응형