참고문헌 :
[자료구조] 덱(Deque)의 이해와 구현
[자료구조] 덱(Deque)의 이해와 구현덱의 이해와 ADT의 정의덱을 한 문장으로 설명하면 다음과 같다.&q...
blog.naver.com
자료구조 : 덱(deque)
1. 덱의 정의 덱(deque, double-ended queue)은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조의 한 형태이다. 두 개의 포인터를 사용하여, 양쪽에서 삭제와 삽입을 발생 시킬 수 있다. 큐와 스택을
jjudrgn.tistory.com
챕터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 |