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
반응형