자료구조 덱 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 ]
}
