본문 바로가기
개념 정리/자료구조

자료구조 : 덱

by newbie22 2021. 3. 8.

참고문헌 :

 

m.blog.naver.com/PostView.nhn?blogId=isaac7263&logNo=221507063144&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[자료구조] 덱(Deque)의 이해와 구현

[자료구조] 덱(Deque)의 이해와 구현덱의 이해와 ADT의 정의덱을 한 문장으로 설명하면 다음과 같다.&q...

blog.naver.com

jjudrgn.tistory.com/15

 

자료구조 : 덱(deque)

1. 덱의 정의 덱(deque, double-ended queue)은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조의 한 형태이다. 두 개의 포인터를 사용하여, 양쪽에서 삭제와 삽입을 발생 시킬 수 있다. 큐와 스택을

jjudrgn.tistory.com

ldgeao99.tistory.com/249

 

챕터2-3. 자료구조 | 덱(Deque)

덱의 개념 # 덱이란 - Deque, Double-ended queue의 약자이다. - 양 끝에서만 자료를 넣고 양 끝에서 뺄 수 있는 자료구조 - 큐는 push, pop을 할 수 있는 위치가 한 방향으로 고정되어 있지만, 덱은 앞에서

ldgeao99.tistory.com

 


1. 덱 (Deque)

1.1 정의 : deque( Double-ended Queue )로 양쪽 끝에서 삽입과 삭제가 가능한 자료구조입니다.

 

1.2 메서드 종류

- push_front : 덱의 앞에 데이터 추가

- push_back : 덱의 뒤에 데이터 추가

- pop_front : 덱의 앞에서 데이터 제거

- pop_back : 덱의 뒤에서 데이터 제거

 


2. 구현하기

덱을 구현할 때 주로 이중 연결 리스트(Doubly-linked List)를 사용하여 구현을 하지만 해당 포스트에서는 원형 큐를 사용하여 구현하도록 하겠습니다.

 

C99

#include<stdio.h>
#include<Windows.h>

#define MAX_SIZE 20

typedef int element;

typedef struct _deque{
	element data[MAX_SIZE];
	int front, rear;
}deque;

void init_deque(deque* q) {
	q->front = q->rear = 0;

	for (int i = 0; i < MAX_SIZE; i++)
		q->data[i] = 0;
}

int isEmpty(deque q) {
	return q.front == q.rear ? 1 : 0;
}

int isFull(deque q) {
	return (q.rear + 1) % MAX_SIZE == q.front ? 1 : 0;
}

void push_front(deque* q, element data) {
	if (isFull(*q)) {
		fprintf(stderr, "deque is full!");
		exit(1);
	}
	q->data[q->front--] = data;
	q->front = (q->front + MAX_SIZE) % MAX_SIZE;
}

void push_rear(deque* q, element data) {
	if (isFull(*q)) {
		fprintf(stderr, "deque is full!");
		exit(1);
	}
	q->rear = (q->rear + 1) % MAX_SIZE;
	q->data[q->rear] = data;
}

element pop_front(deque* q) {
	if (isEmpty(*q)) {
		fprintf(stderr, "deque is empty!");
		exit(1);
	}
	q->front = (q->front + 1) % MAX_SIZE;
	return q->data[q->front];
}

element pop_rear(deque* q) {
	element val;
	if (isEmpty(*q)) {
		fprintf(stderr, "deque is empty!");
		exit(1);
	}
	val = q->data[q->rear];
	q->rear = (q->rear - 1 + MAX_SIZE) % MAX_SIZE;
	return val;
}

'개념 정리 > 자료구조' 카테고리의 다른 글

자료구조 : 트리  (0) 2021.06.11
자료구조 : 그래프  (0) 2021.05.05
자료구조 : 링크드 리스트  (0) 2021.04.28
자료구조 : 힙 (with 우선순위 큐)  (0) 2021.02.22
자료구조 : 큐  (0) 2021.02.21