Data Structure- Deq (c)

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

Leave a Reply

Your email address will not be published. Required fields are marked *