์ฃผ์์ฉ์ด
- ๋ฆฌ์คํธ : ‘์์๋ค ๊ฐ์ ์์’๊ฐ ์ง์ผ์ง๋ฉฐ ์ ์ง๋๋ ์๋ฃ๊ตฌ์กฐ
- ๋ฆฌ์คํธ์ ์์๋ค ๊ฐ์ ์์ : ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ์ธ ์์น์ ์๊ด์์ด ์ฌ๋๋ค์ ๋จธ๋ฆฟ์์ ์ธ์๋๋ ‘๋
ผ๋ฆฌ์ ์ธ ์์’, ํน์ ๋ฆฌ์คํธ์ ๋ํ๋๋ ์์๋ค ๊ฐ์ ‘์๋ฏธ์ ์ธ ์์’
- ๋ฆฌ์คํธ์ ๋
ธ๋ : ์์๊ฐ๊ณผ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์์น์ ์ฃผ์๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๋จ์, ๋ฐ์ดํฐ ์์(์์)์ ๋ฆฌ์คํธ์ ๋ค์ ์์๋ฅผ ์ง์ํ๋ ํฌ์ธํฐ(pointer, ์ฃผ์)๋ฅผ ๊ฐ์ง๋ ์๋ฃ๋จ์
- ํฌ์ธํฐ : ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ฐ(๋ฐ์ดํฐ)์ ์ ์ฅ ์์น์ ๋ํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐํ
- ๋จํญ ์ฐ์ฐ์ : ํผ์ฐ์ฐ์๋ฅผ ํ๋๋ง ๊ฐ๋ ์ฐ์ฐ์
- ๊ตฌ์กฐ์ฒด(struct) : ๋ค์ํ ๋ฐ์ดํฐํ์ ๋ณ์๋ฅผ ํ๋์ ์์ ์์ ๋ฃ์ด์ ์ ์ธํ๊ฑฐ๋ ์ฌ์ฉํ๋ C ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ
๋ฆฌ์คํธ์ ์๋ฏธ
- ์ผ์ ํ ์์์ ๋์ด
- ์ด๋ค ์ ์์ ์ํด์ ๊ฒฐ์ ๋ ๋
ผ๋ฆฌ์ ์ธ ์์์ ๋์ด
(๋ฌผ๋ฆฌ์ ์ธ ์์๋ ์๊ด ์์ / ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ ๋
ผ๋ฆฌ์ ์ธ ์์์ ๋ฌผ๋ฆฌ์ ์ธ ์์๊ฐ ๋์ผํด์ผ ํจ )
- ๋ฆฌ์คํธ์ ์์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ์ธ ์์น์ ์๊ด์์ด ์ฌ๋๋ค์ ๋จธ๋ฆฟ์์ ์ธ์๋๋
๋
ผ๋ฆฌ์ ์ธ ์์ ํน์ ๋ฆฌ์คํธ์ ๋ํ๋๋ ์์๋ค ๊ฐ์ ์๋ฏธ์ ์ธ ์์๋ฅผ ์๋ฏธํจ
- ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ํํ๋๋ ์์๊ฐ ๋ฐฐ์ด ์์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(์ฃผ๊ธฐ์ต ์ฅ์น, DDR)์์์ ๋ฌผ๋ฆฌ์ ์ธ ์์น๋ฅผ ์๋ฏธํจ
- ํ์ง๋ง ๋ฆฌ์คํธ์ '์์' ๊ฐ๋
์ ์ด๋ค ์ ์์ ์ํด์ ๊ฒฐ์ ๋ ๋
ผ๋ฆฌ์ ์ธ ์์์
- ์์๋ค์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์๋ ์์น์๋ ๋ฌด๊ดํ๊ฒ ์์๋ค ๊ฐ์ ๋
ผ๋ฆฌ์ ์ธ ์์๋ง ์ ์งํจ
๋ฆฌ์คํธ์ ๊ตฌํ๋ฐฉ๋ฒ
- ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๋ฆฌ์คํธ์ ๊ตฌํ๋ฐฉ๋ฒ
: ์์๊ฐ์ ์ ์ฅํ๋ ๊ณต๊ฐ๊ณผ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ํจ๊ป ๊ตฌํํ๋ ๋ฐฉ๋ฒ (์ฐ๊ฒฐ ๋ฆฌ์คํธ)
- ๋ฐฐ์ด์ ์ด์ฉํ ๋ฆฌ์คํธ์ ๊ตฌํ ๋ฐฉ๋ฒ
๋ฐฐ์ด์ ์ด์ฉํ ๋ฆฌ์คํธ์ ์์ ์ฝ์
/์ญ์
- ๋ฐฐ์ด์ ํ์ฅ
: ์ด๊ธฐ ๋ฐฐ์ด ์ ์ธ์์ ์ถฉ๋ถํ ํฌ๊ฒ ํ๋ฉด ์ด๋ ์ ๋๋ ๋ฐฐ์ด์ ์ถ๊ฐ ํ์ฅ์ ํผํ ์ ์๊ฒ ์ง๋ง, ์์๋ฅผ ๋ฆฌ์คํธ์ ์ค๊ฐ์ ์ฝ์
ํ๊ธฐ ์ํด์๋ ๋ฆฌ์คํธ์ ์์๊ฐ์ ํ๋์ฉ ๋ค๋ก ๋ฐ์ด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํจ
- '๋ฐฐ์ด๋ก ๊ตฌํ๋ ๋ฆฌ์คํธ'๋ ์์์ ์์๊ฐ ์ฐ์์ ์ธ ๋ฌผ๋ฆฌ์ ์ฃผ์์ ์ ์ฅ๋จ
- ์์๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ์ญ์ ํ๊ธฐ ์ํด์๋ ํด๋น ์์์ ์์น ๋ค์ ์๋ ๋ชจ๋ ์์๋ฅผ ๋ค๋ก ๋ฌผ๋ฆฌ๊ฑฐ๋ ์์ผ๋ก ๋น๊ฒจ์ผ๋ง ๋จ
- ๋ฆฌ์คํธ ์์๊ฐ์ ์ด๋์ ์์์๊ฐ ๋ง์์๋ก ํ๋ก๊ทธ๋จ์ ์ํ์๊ฐ์ ์ฆ๊ฐ์ํด
- ๋ฐฐ์ด์ ์ด์ฉํ ๋ฆฌ์คํธ์ ์์ ์ฝ์
/์ญ์ ์ ๋ฐ์ํ๋ ๋ฌธ์
- ๋ฆฌ์คํธ์ ์์ ์ฝ์
์ ํ๋ก๊ทธ๋จ์ ์คํ ์ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์์ํด
- ๋ฐฐ์ด์ ์ด์ฉํ ๋ฆฌ์คํธ์ ๊ตฌํ์ ์ค์ IT ์๋น์ค ํ๊ฒฝ์์๋ ์์ฃผ ์ฌ์ฉ๋์ง ์๊ณ ์์
- ์๋ฃ์ ์ฝ์
์ญ์ ๊ฐ ๋น๋ฒํ ๋ฐ์ํ๋ ์ํฉ์์ ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ ๊ฒ์ ๋น๋ฒํ ์๋ฃ ์ด๋์ผ๋ก ์ธํ ๋นํจ์จ์ ์ธ ์ปดํจํ
์ฑ๋ฅ์ ์ ๋ฐํจ
๋ฆฌ์คํธ ๊ตฌํ์ ์ํ ํฌ์ธํฐ
- ๋
ธ๋์ ๊ตฌ์กฐ
- ๋
ธ๋(node): ๋ฆฌ์คํธ์ ์์(๊ฐ) + ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ๋ณด
- ๋
ธ๋๋ ๋ฐ์ดํฐ ์์(์์, ๊ฐ)์ ๋ฆฌ์คํธ์ ๋ค์ ์์๋ฅผ ์ง์ํ๋ ํฌ์ธํฐ(์ฃผ์, ๋งํฌ(link))๋ก ๊ตฌ์ฑ๋จ: ์๋ฃ์ ๋งํฌ
๊ตฌ์กฐ์ฒด์ ๊ตฌํ
ํฌ์ธํฐ์ ๊ตฌํ
- ํฌ์ธํฐ์ ํ ๋น๊ณผ ๋ฐํ ์
int a, *p_a;
float b, *p_b;
p_b = (int *)malloc(sizeof(int));
p_b = (float *)malloc(sizeof(float));
*p_a = 10;
*p_b = 3.14;
printf("a is %d, b is %fโฉn", *p_a, *p_b);
free(p_a);
free(p_b);
์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋
ธ๋์ ์ญ์
- ๋ฆฌ์คํธ์ ์์ ์ญ์ ์ฐ์ฐ ๋จ๊ณ
- ์ญ์ ํ ๋
ธ๋์ ์ ํ ๋
ธ๋์ ๋งํฌ ํ๋๋ฅผ ์ญ์ ํ ๋
ธ๋์ ํํ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
- ์ญ์ ํ ๋
ธ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐํํ๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋
ธ๋์ ์ฝ์
- ๋ฆฌ์คํธ์ ์์ ์ฝ์
์ฐ์ฐ ๋จ๊ณ
- ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ๊ณ ์ฝ์
ํ ๋ด์ฉ์ ์ ์ฅํ์ฌ ์ฝ์
ํ x ๋
ธ๋๋ฅผ ์์ฑํฉ๋๋ค.
- x ๋
ธ๋์ ๋งํฌ๋ถ๋ถ์ด ํํ ๋
ธ๋๊ฐ ๋ j ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํฉ๋๋ค.
- ์ฝ์
๋ x๋
ธ๋์ ์ ํ ๋
ธ๋๊ฐ ๋ i ๋
ธ๋์ ๋งํฌ ํ๋๊ฐ x ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํฉ๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ์ฝ์
์ฐ์ฐ(1-1)
void addNode(linkedList_h* H, int x){
// ๋ฆฌ์คํธ ๋ง์ง๋ง ๋
ธ๋์ ์ฝ์
์ฐ์ฐํ๋ฉฐ, x๊ฐ์ 100์ด๋ผ๊ณ ๊ฐ์ ํจ
listNode* NewNode;
listNode* LastNode;
NewNode = (listNode*)malloc(sizeof(listNode));
NewNode -> data = x;
NewNode -> link = NULL;
}
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ์ฝ์
์ฐ์ฐ(1-2)
void addNode(linkedList_h* H, int x){
if(H -> head == NULL){ // ํ์ฌ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ
H -> head = NewNode;
return;
}
LastNode = H -> head;
while(LastNode -> link! = NULL){
LastNode = LastNode -> link;
LastNode -> link = NewNode;
}
}
์ ๋ฆฌํ๊ธฐ
- ๋ฆฌ์คํธ์ ‘์์’๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ์ธ ์์น์ ์๊ด์์ด ์ฌ๋๋ค์ ๋จธ๋ฆฟ์์ ์ธ์๋๋ ‘๋
ผ๋ฆฌ์ ์ธ ์์’, ํน์ ๋ฆฌ์คํธ์ ๋ํ๋๋ ์์๋ค ๊ฐ์ ‘์๋ฏธ์ ์ธ ์์’๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฐฐ์ด์ ์ด์ฉํ ๋ฆฌ์คํธ์ ๊ตฌํ์ ์ค์ IT ์๋น์ค ํ๊ฒฝ์์๋ ์์ฃผ ์ฌ์ฉ๋์ง ์๊ณ ์์ต๋๋ค. ์๋ฃ์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ ๋ฐ์ํ๋ ์ํฉ์์, ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ ๊ฒ์ ๋น๋ฒํ ์๋ฃ ์ด๋์ผ๋ก ์ธํ ๋นํจ์จ์ ์ธ ์ปดํจํ
์ฑ๋ฅ์ ์ ๋ฐํฉ๋๋ค.
- ํฌ์ธํฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์์์ ์๋ฆฌ์๋ ์์๊ฐ์ ์ ์ฅํ๊ณ , ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ๋ณด์ ์๋ฆฌ์๋ ๋ค์ ์์๊ฐ ์ ์ฅ๋ ์์น์ ์ฃผ์๊ฐ์ ์ ์ฅํฉ๋๋ค. ์กฐ๊ธ ๋ ‘ํ๋ก๊ทธ๋จ’์ค๋ฝ๊ฒ ์ค๋ช
ํ์๋ฉด, ๋ฆฌ์คํธ์ ์์์ ์๋ฆฌ์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ๋ณด์ ์๋ฆฌ๋ฅผ ํฉ์ณ์ ๋
ธ๋(node)๋ผ๊ณ ํฉ์๋ค. ๋
ธ๋์๋ ๋ฐ์ดํฐ ์์(์์)์ ๋ฆฌ์คํธ์ ๋ค์ ์์๋ฅผ ์ง์ํ๋ ํฌ์ธํฐ(pointer, ์ฃผ์)๋ฅผ ๊ฐ์ง๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด ํฌ์ธํฐ๋ ๋งํฌ(link)๋ผ๊ณ ๋ ๋ถ๋ฆ
๋๋ค.
- ํฌ์ธํฐ์ ‘๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ’์ด๋ผ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ฐ์ ์์น๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ฐ(๋ฐ์ดํฐ)์ ์ ์ฅ ์์น์ ๋ํ ์ฃผ์๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด ์ ์ฅ ์์น๋ฅผ ์ด์ฉํด์ ๋ฆฌ์คํธ์ ์์๊ฐ์ ์ฐพ์๊ฐ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ฐ์ดํฐํ์ ๋ณ์๋ฅผ ํ๋์ ์์ ์์ ๋ฃ์ด์ ์ ์ธํ๊ฑฐ๋ ์ฌ์ฉํ๋ C ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ์ด ๊ตฌ์กฐ์ฒด(struct)์
๋๋ค.