728x90
๐ต ์ํ ๋ฑ double-ended queue
์ํ ํ๋ ํญ์ ํ๋์ ์๋ฆฌ๋ฅผ ๋น์๋
front, rear์์ ๋ชจ๋ ์ฝ์ , ์ญ์ ๊ฐ ๊ฐ๋ฅํ ํ
front, rear ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํ
๊ณต๋ฐฑ ์ํ > front == rear
ํฌํ ์ํ > front = (rear + 1) % Mํํฌ๊ธฐ
๐ก ์ํ ๋ฑ ์ฝ๋
add_rear ๋ค๋ก ์ด๋ > ๋น ๊ณต๊ฐ์ ์ฝ์
get_front ๋ค๋ก ์ด๋ > ํด๋น ๊ฐ ์ญ์
get_rear ์ญ์ > ์์ผ๋ก ์ด๋
add_front ์ฝ์ > ์์ผ๋ก ์ด๋
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef int element;
typedef struct {
int front, rear;
element data[MAX_SIZE];
} QueueType;
void init(QueueType* q) {
q->front = -1;
q->rear = -1;
}
int is_full(QueueType* q) {
return q->front == (q->rear + 1) % MAX_SIZE; // ์ํ ํ์ ๊ฒฝ์ฐ
}
int is_empty(QueueType* q) {
return q->front == q->rear;
}
// rear์์ ์ฝ์
void add_rear(QueueType* q, int item) {
if (is_full(q)) {
printf("์๋ฌ");
return;
}
else {
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[(q->rear)] = item;
}
}
// rear์์ ์ญ์
int get_rear(QueueType* q) {
int prev = q->rear;
if (is_empty(q)) {
printf("์๋ฌ");
return;
}
else {
q->rear = (q->rear - 1 + MAX_SIZE) % MAX_SIZE;
return q->data[(prev)];
}
}
// front์์ ์ญ์
int get_front(QueueType* q) {
if (is_empty(q)) {
printf("์๋ฌ");
return;
}
else {
q->front = (q->front + 1) % MAX_SIZE;
return q->data[(q->front)];
}
}
// front์์ ์ฝ์
void add_front(QueueType* q, int item) {
if (is_full(q)) {
printf("์๋ฌ");
return;
}
else {
q->data[(q->front)] = item;
q->front = (q->front - 1 + MAX_SIZE) % MAX_SIZE;
}
}
int main() {
int i;
QueueType q;
init(&q);
add_rear(&q, 1);
add_rear(&q, 2);
add_rear(&q, 3);
i = get_rear(&q);
printf("%d\n", i);
return 0;
}
* ํ ์นธ ๋ค๋ก ์ด๋ ์
q->front = (q->front + 1) % MAX_SIZE;
* ํ ์นธ ์์ผ๋ก ์ด๋ ์
q->front = (q->front - 1 + MAX_SIZE) % MAX_SIZE;
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ ํ Linked Queue (0) | 2023.01.12 |
---|---|
[C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ ์คํ Linked Stack (0) | 2023.01.12 |
[C์ธ์ด] - ์ํ ํ Circular Queue (0) | 2023.01.11 |
[C์ธ์ด] - ํ Queue (0) | 2023.01.11 |
[C์ธ์ด] Stack ์คํ - ํ์ํ๊ธฐ์ ๊ณ์ฐ postfix / ๋ฌธ์์ด ์ซ์ ์ ์ํ์ผ๋ก ๋ฐ๊พธ๊ธฐ (0) | 2023.01.11 |