๐ ์๋ฃ๊ตฌ์กฐ:: ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
๐ What I Will Learn
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋์ ์๋ฆฌ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ํด ์ตํ๊ธฐ...
์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
1๏ธโฃ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋?
1) ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋จธ๋ฆฌ(Head)์ ๊ผฌ๋ฆฌ(Tail)๋ฅผ ๋ชจ๋ ๊ฐ์ง๋ค๋ ํน์ง์ด ์๋ค
2) ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ ๋
ธ๋๋ ์ ๋
ธ๋์ ๋ค ๋
ธํธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ ์ฅํ๊ณ ์๋ค
โ๏ธ ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌํ
1) ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ์ธํ๊ธฐ
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct Node *prev; // ์ ๋
ธ๋์
struct Node *next; // ๋ค ๋
ธ๋ ์ ์ธ
} Node;
Node *head, *tail;
2) ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฝ์
- [ 1 ]: ์ฝ์ ํ ๋ ธ๋์ ์ ๋ ธ๋๊ฐ, ์ฝ์ ํ ๋ ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- [ 2 ]: ์ฝ์
ํ ๋
ธ๋๊ฐ ์ ๋
ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- ์ด๋ ์ฝ์ ํ ๋ ธ๋์ ์ฝ์ ํ ๋ ธ๋์ ์ ๋ ธ๋๊ฐ ์๋ก ๋ฐ๋ผ๋ณด๋ ํํ
- [ 3 ]: ์ฝ์ ํ ๋ ธ๋์ ๋ค ๋ ธ๋๊ฐ, ์ฝ์ ํ ๋ ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- [ 4 ]: ์ฝ์
ํ ๋
ธ๋๊ฐ ๋ค ๋
ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- ์ด๋ ์ฝ์ ํ ๋ ธ๋์ ์ฝ์ ํ ๋ ธ๋์ ๋ค ๋ ธ๋๊ฐ ์๋ก ๋ฐ๋ผ๋ณด๋ ํํ
// ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฝ์
ํจ์
void insert(int data) {
Node* node = (Node*) malloc(sizeof(Node)); // ์๋ก์ด ๋
ธ๋ ํ ๋น
node->data = data; // ๋ฐ์ดํฐ ์ด๊ธฐํ
Node* cur;
cur = head->next;
while (cur->data < data && cur != tail) {
cur = cur->next; // cur๋ณ์๊ฐ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝ
}
Node* prev = cur->prev; // ์ฝ์
ํ ๋
ธ๋์ ์ ๋
ธ๋๋ฅผ prev๋ก ์ค์
prev->next = node; // ์ ๋
ธ๋์ next๊ฐ ํ์ฌ ์ฝ์
ํ ๋
ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๊ณ
node->prev = prev; // ๋
ธ๋์ prev๊ฐ ์ ๋
ธ๋๊ฐ ๋๊ณ
cur->prev = node; // ๋ค ๋
ธ๋์ prev๊ฐ ๋
ธ๋๊ฐ ๋๊ณ
node->next = cur; // ๋
ธ๋์ next๊ฐ ์ฝ์
ํ ๋
ธ๋์ ๋ฐ๋ก ๋ค์ ๋ค์ด๊ฐ ๋
ธ๋๊ฐ ๋ ์ ์๋๋ก
}
3) ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ญ์
- [ 1 ]: ์ญ์ ํ ๋ ธ๋์ ์ ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋์ ๋ค๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- [ 2 ]: ์ญ์ ํ ๋ ธ๋์ ๋ค ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋์ ์์ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค
- [ 3 ]: ์ญ์ ํ ๋ ธ๋ ํ ๋น ํด์
// ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ญ์ ํจ์
void removeFront() {
Node* node = head->next;
head->next = node->next;
Node* next = node->next;
next->prev = head; free(node);
}
4) ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ถ๋ ฅ
// ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ์ฒด ์ถ๋ ฅ ํจ์
void show() {
Node* cur = head->next;
while (cur != tail) {
printf("%d ", cur->data);
cur = cur->next;
}
}
5) ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฌ์ฉํ๊ธฐ
int main(void) {
head = (Node*) malloc(sizeof(Node));
tail = (Node*) malloc(sizeof(Node));
head->next = tail;
head->prev = head;
tail->next = tail;
tail->prev = head;
insert(2);
insert(1);
insert(3);
insert(9);
insert(7);
removeFront();
show();
system("pause");
return 0;
}
โจ tl;dr
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ๊ฐ ๋ ธ๋๊ฐ ์ ๋ ธ๋์ ๋ค ๋ ธ๋์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ค
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ฉด ๋ฆฌ์คํธ์ ์์์๋ถํฐ ํน์ ๋ค์์๋ถํฐ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ค
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ์๋ฃ๊ตฌ์กฐ:: ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@april_5/์๋ฃ๊ตฌ์กฐ-์๋ฐฉํฅ-์ฐ๊ฒฐ-๋ฆฌ์คํธ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค