[์ž๋ฃŒ๊ตฌ์กฐ] 5. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

5์žฅ. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

EX) C์–ธ์–ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๊ตฌ์กฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

int a, *p_a; float b, *p_b; p_a = (int*)malloc(sizeof(int)); p_b = (float*)malloc(sizeof(float)); *p_a = 10;

1. ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋…

2. ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒํ˜•

๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒํ˜•

๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์— ์ž๋ฃŒ๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ

๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์— ์ž๋ฃŒ๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ

๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด, ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ์™€ ํ•จ๊ป˜ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ ๋˜ํ•œ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ ๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋’ค์˜ ์ธ๋ฑ์Šค ์ž๋ฃŒํ˜•๋“ค์˜ ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์ด ๋ชจ๋‘ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋Ÿ‰์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

3. ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„

ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„

๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ์ฃผ์†Œ(ํฌ์ธํ„ฐ)๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ํ•˜๋ฉฐ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์„ฑ ๋‹จ์œ„๋Š” ๋…ธ๋“œ(๋ฐ์ดํ„ฐ์™€ ์ฃผ์†Œ) ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๊ฐ„ ์—ฐ๊ฒฐ์€ ํฌ์ธํ„ฐ์˜ ์—ฐ๊ฒฐ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋งํฌ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‹ค์Œ์— ์œ„์น˜ํ•  ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ๋Š” ๋„ ํฌ์ธํ„ฐ(null pointer) ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

4. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๋…ธ๋“œ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ๋Œ€ํ‘œ์  ์—ฐ์‚ฐ์€ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์ด๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰ ์—์„œ์˜ ํšจ์œจ์€ ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋–จ์–ด์ง„๋‹ค (์ˆœ์ฐจ ์กฐํšŒํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ). ํ•˜์ง€๋งŒ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์—์„œ ์œ ๋ฆฌํ•œ๋ฐ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

4-1. ๋…ธ๋“œ์˜ ์‚ฝ์ž…

์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ ์ „ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ ์ „ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์‚ฝ์ž… ์—ฐ์‚ฐ์€ ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋ผ๋ณด๋˜ ์ฃผ์†Œ๋ฅผ ๋Š๊ณ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ๋ผ์–ด๋“œ๋Š” ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

๋ฐ์ดํ„ฐ A ์˜ ๋…ธ๋“œ์™€ ๋ฐ์ดํ„ฐ C ์‚ฌ์ด์˜ ๋…ธ๋“œ ์‚ฌ์ด์— ์‚ฝ์ž… ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ ์ƒํ™ฉ

๋ฐ์ดํ„ฐ A ์˜ ๋…ธ๋“œ์™€ ๋ฐ์ดํ„ฐ C ์‚ฌ์ด์˜ ๋…ธ๋“œ ์‚ฌ์ด์— ์‚ฝ์ž… ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ ์ƒํ™ฉ

4-2. ๋…ธ๋“œ์˜ ์‚ญ์ œ

์‚ญ์ œ ์—ฐ์‚ฐ์€ ํŠน์ • ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ํ•ด์ œํ•˜๊ณ  ๋…ธ๋“œ ์‚ฌ์ด์˜ ๋งํฌ๋ฅผ ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

Head ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐ์ดํ„ฐ A ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ ์ƒํ™ฉ

Head ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐ์ดํ„ฐ A ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ ์ƒํ™ฉ

5. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•

  1. LinkedList create_linkedList()
    ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ์ƒ์„ฑ
  2. LinkedList add(data)
    ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  3. LinkedList insert(data)
    ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  4. data
    -์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํŽธ์˜์ƒ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋‚ด ๋ฐ์ดํ„ฐ์— ์ค‘๋ณต์€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.