자료구조 덱 c언어 소스
#include <stdio.h> #define max 20 typedef struct { int front, rear; int deq[max]; }deq_type; typedef deq_type* deq_type_ptr; void init(deq_type_ptr dq) { dq->front = 0; dq->rear = 0; } int is_full(deq_type dq) { if ((dq.rear + 1) % max == dq.front) return 1; else return 0; } int is_empty(deq_type dq) { if (dq.rear == dq.front) return 1; else return 0; } // 기존 enqueue void add_rear(deq_type_ptr dq, int item) { if (!is_full(*dq)) { dq->rear = (dq->rear + 1) % max; dq->deq[dq->rear] = item; } else printf("덱이 꽉 참"); } void add_front(deq_type_ptr dq, int item) { if (!is_full(*dq)) { dq->deq[dq->front] = item; dq->front = (dq->front - 1 + max) % max; } else printf("덱이 꽉 참"); } int delete_rear(deq_type_ptr dq) { if (!is_empty(*dq)) { int tmp = dq->deq[dq->rear]; dq->rear = (dq->rear - 1 + max) % max; return tmp; } else printf("덱이 비어 있음"); } // 기존 dequeue int delete_front(deq_type_ptr dq) { if (!is_empty(*dq)) { dq->front = (dq->front + 1) % max; return dq->deq[dq->front]; } else printf("덱이 비어 있음"); } // 기존 peek int get_front(deq_type dq) { if (!is_empty(dq)) return dq.deq[(dq.front + 1) % max]; else printf("덱이 비어 있음"); } int get_rear(deq_type dq) { if (!is_empty(dq)) return dq.deq[dq.rear]; else printf("덱이 비어 있음"); } int main(void) { deq_type dq; init(&dq); // 삽입 add_rear(&dq,10); // [ 10 ] <- add_rear(&dq, 11); // [ 10 11 ] <- add_front(&dq, 20); // -> [ 20 10 11 ] add_front(&dq, 21); // -> [ 21 20 10 11 ] // 삭제 printf("[ %d ]\n",delete_front(&dq)); // 21 <- [ 20 10 11 ] printf("[ %d ]\n", delete_rear(&dq)); // [ 20 10 ] -> 11 // 전단(front)의 원소 불러오기 printf("[ %d ]\n", get_front(dq)); // [ 20 10 ] // 후단(front)의 원소 불러오기 printf("[ %d ]\n", get_rear(dq)); // [ 20 10 ] }