๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Computer Science

[์ž๋ฃŒ๊ตฌ์กฐ] ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(singly linked list) - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ

by Leica 2019. 11. 20.
๋ฐ˜์‘ํ˜•

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

๋ฆฌ์ŠคํŠธ์˜ ์˜ˆ

- ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์›์†Œ๋“ค ๊ฐ„์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

- ์›์†Œ๋“ค ๊ฐ„์˜ ์ˆœ์„œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ(์ถ”์ƒ์ ์œผ๋กœ) ์ง€์ผœ์ง€๋ฉฐ ์›์†Œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ๋ฐฐ์—ด์˜ ์ˆœ์„œ : ๋ฌผ๋ฆฌ์  VS ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ : ๋…ผ๋ฆฌ์ =์ถ”์ƒ์ =์˜๋ฏธ์ 

- ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์›์†Œ์˜ ์ด๋™์ด ๋งŽ์•„์ง„๋‹ค.

- ๋”ฐ๋ผ์„œ ๋ฆฌ์ŠคํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ๋‹ค.

- ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ : ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜ ์ €์žฅ

- ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

 

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

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

4๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ (1919, 1936, 1945, 1950, 1988)๋ฅผ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

 

  ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ„๋‹จํ•˜๋ฉฐ ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ™œ์šฉ ํšจ์œจ์ด ๋†’๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๊ฐ ์›์†Œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…, ์‚ญ์ œ์™€ ๊ฐ™์€ ๋ณ€๋™ ๋ฐœ์ƒ ์‹œ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

 

  ๋ฆฌ์ŠคํŠธ์— '1936'์ด ์ถ”๊ฐ€๋˜์–ด (1919, 1936, 1945, 1950, 1988)์ด ๋˜๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ํ™•์žฅ๋˜์–ด์•ผ ํ•˜๋ฉฐ 1945, 1950, 1988์€ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€๋ ค๋‚˜์•ผ ํ•œ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์—๋„ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋งŒ์ผ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ 2000๊ฐœ์ธ๋ฐ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์ค‘ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ์œ„์น˜์— ์‚ฝ์ž…๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด ๊ฒฝ์šฐ 1999๊ฐœ์˜ ์›์†Œ๋ฅผ ๋’ค๋กœ ํ•œ ์นธ์”ฉ ๋ฐ€์–ด์•ผ ํ•œ๋‹ค. ์‚ฝ์ž… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ญ์ œ ์‹œ์—๋„ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋•Œ๋ฌธ์— ์‹ค์ œ IT ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌํ˜„์€ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

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

ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)๋ผ๊ณ  ํ•œ๋‹ค.

 

๋…ธ๋“œ์˜ ๊ตฌ์กฐ

  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—๋Š” ๋…ธ๋“œ(node) ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ๋ฆฌ์ŠคํŠธ์˜ ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”, ์ฆ‰ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ๋งํฌ ํ•„๋“œ(ํฌ์ธํ„ฐ)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ์‹œ ๋ฆฌ์ŠคํŠธ (1919, 1936, 1945, 1950, 1988)๋ฅผ ํ‘œํ˜„ํ•˜๋ ค๋ฉด 4๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํ‘œํ˜„

  ์˜ˆ์‹œ ๋ฆฌ์ŠคํŠธ๋Š” 1919 → 1945 → 1950 → 1998์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ด๋ฅผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. ๊ทธ๋ฆผ์€ ์ถ”์ƒํ™”ํ•œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํ‘œํ˜„์ด๋ฉฐ ๊ฐ ์›์†Œ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ €์žฅ๋œ๋‹ค.

 

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์˜ˆ์‹œ

  ๋…ธ๋“œ๋Š” C์–ธ์–ด์—์„œ struct ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๋ถ„์œผ๋กœ ํ•„์š”์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ํ•„๋“œ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ฐ์ดํ„ฐ ํ•„๋“œ์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ’์ด๋‚˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ๋งํฌ ํ•„๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋‹ค์Œ์— ์˜ค๋Š” ๋ฆฌ์ŠคํŠธ ์›์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ ์›์†Œ๋ฅผ ์ฐพ์•„๊ฐ„๋‹ค. ๋งํฌ ํ•„๋“œ๋Š” C์–ธ์–ด์—์„œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค.

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

 

4. ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€ ๊ตฌ์กฐ์ฒด ๊ทธ๋ฆฌ๊ณ  ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

C์–ธ์–ด์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์ด ์•„๋‹ˆ๋ฏ€๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋„์˜ ๋‚ด์šฉ๋งŒ ๋‹ค๋ฃฌ๋‹ค.

 

4-1. ํฌ์ธํ„ฐ ๋ณ€์ˆ˜

ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค. ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค.

 

  ๋ณ€์ˆ˜ a๋Š” int ํƒ€์ž…์˜ ๋ณ€์ˆ˜์ด๋ฉฐ ์ •์ˆ˜ 100์„ ์ €์žฅํ•œ๋‹ค. ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b๋Š” int ํƒ€์ž… ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ด๋‹ค. ๊ฐ๊ฐ ff00, ff18 ์ฃผ์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž &๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ff00์„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b์— ํ• ๋‹นํ•œ๋‹ค.

 

1
2
3
4
5
6
int a = 100;
int *b;
= &a;
 
printf("a is %d\n", a);        //a is 100
printf("*b is %d\n"*b);    //b is 100
cs

  ๋ณ€์ˆ˜ a๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜์˜ ์ฃผ์†Œ๊ฐ’์„ ff00์œผ๋กœ ๊ฐ€์ •ํ•˜์˜€๋‹ค. 6๋ผ์ธ์—์„œ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž *๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ b์˜ ์ €์žฅ ์˜์—ญ์—์„œ ff00์„ ์ถ”์ถœํ•˜๊ณ  ์ถ”์ถœ๋œ ff00์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐ€ ff00์— ์ €์žฅ๋œ ๊ฐ’ '100'์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ๋ฌธ์—์„œ ๋‘˜ ๋‹ค 100์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

1
2
3
4
5
int a;
int *p_a;
p_a = &a;    //p_a์— ๋ณ€์ˆ˜ a์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
= 100        //a์— 100์„ ์ €์žฅ
*p_a = 800    //p_a๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” a์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐ€์„œ 800์„ ์ €์žฅ
cs

์—ญ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ง€์‹œํ•˜๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€๋‹ค. ์ฆ‰ 5๋ผ์ธ์€ a = 800;๊ณผ ๋™์ผํ•˜๋‹ค.

 

4-2. ๊ตฌ์กฐ์ฒด(struct)

๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐํ˜•์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

 

1
2
3
4
struct linked_list_node {
    int data;
    struct linked_list_node *link;
}
cs

์œ„ ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ์ •์ˆ˜๊ฐ’๊ณผ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ–๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. intํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋ฅผ ์ด์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4-3. ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(malloc)

  ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‹คํ–‰ ์ „์— ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉด ๋ฐฐ์—ด์ด ์‹ค์ œ ๋ฆฌ์ŠคํŠธ ์›์†Œ์˜ ์ˆซ์ž๋ณด๋‹ค ํฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€, ์ž‘์œผ๋ฉด ์‹คํ–‰ ์ค‘ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด malloc() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ์‹œ์ ์— malloc() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ณ  ์ด์— ๋Œ€ํ•œ ์ฃผ์†Œ๊ฐ’์„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

1
2
3
4
5
6
7
8
9
10
int a, *p_a;
float b, *p_b;
p_a = (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);
cs

3๋ผ์ธ: sizeof(int)๋Š” intํ˜• ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. malloc(sizeof(int))์€ intํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์—ฌ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ฅผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p_a์— ์ €์žฅํ•˜์—ฌ p_a๊ฐ€ ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

4๋ผ์ธ: sizeof(float)์€ floatํ˜• ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. malloc(sizeof(float))์€ floatํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์—ฌ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ฅผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p_b์— ์ €์žฅํ•˜์—ฌ p_a๊ฐ€ ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

9,10๋ผ์ธ: free() ํ•จ์ˆ˜๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

  ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ malloc() ํ•จ์ˆ˜์™€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ํ™œ์šฉ์ด ํ•„์š”ํ•˜๋‹ค.

 

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

5-1. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ ์‚ญ์ œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์‚ญ์ œ๋Š” ์‚ฝ์ž…๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ดˆ๊ธฐ ๋ชจ์Šต

  ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ์‚ญ์ œ๋˜์–ด์•ผ ํ•  ์›์†Œ๋ฅผ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ญ์ œ๋˜์–ด์•ผ ํ•  ์›์†Œ๋ฅผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ x๋กœ ๊ฐ€๋ฆฌํ‚จ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. x๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด x์˜ ์„ ํ–‰ ๋…ธ๋“œ์ธ i๋…ธ๋“œ๊ฐ€ ํ›„ํ–‰ ๋…ธ๋“œ์ธ j๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰ i๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ j๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์‚ญ์ œ ๊ฒฐ๊ณผ

100 → 200 → 300์ด์—ˆ๋˜ ๋ฆฌ์ŠคํŠธ๋Š” ์ด์ œ 100 → 300 ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์‚ญ์ œ :
โ‘  ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์„ ํ–‰ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ํ›„ํ–‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
โ‘ก ์‚ญ์ œํ•  ๋…ธ๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

5-2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์‚ฝ์ž…

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ดˆ๊ธฐ ๋ชจ์Šต

  ์‚ฝ์ž…์„ ํ•˜๋ ค๋ฉด ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์‚ฝ์ž…๋  ์œ„์น˜๋Š” i๋…ธ๋“œ์˜ ๋‹ค์Œ ์œ„์น˜๋กœ, ์‚ฝ์ž…๋  ๋…ธ๋“œ๋Š” x๋…ธ๋“œ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. x๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ j๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  i๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ x๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์‚ญ์ œ์™€ ๋‹ฌ๋ฆฌ ์‚ฝ์ž…์—์„œ๋Š” ๋‘ ๊ฐœ ๋…ธ๋“œ์˜ ๋งํฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š๊ณ  ๋จผ์ € i๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ x๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๋ฉด j๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์žƒ๊ฒŒ ๋˜๋ฏ€๋กœ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ์‹ ๊ทœ ๋…ธ๋“œ์˜ ๋งํฌ ๋จผ์ € ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์‚ฝ์ž… ๊ฒฐ๊ณผ

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์‚ฝ์ž…(โ‘ก, โ‘ข ์ˆœ์„œ ์ค‘์š”) :
โ‘  ์‚ฝ์ž…ํ•  ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
โ‘ก ์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ ์‚ฝ์ž…๋  ์œ„์น˜์˜ ํ›„ํ–‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
โ‘ข ์‚ฝ์ž…๋  ์œ„์น˜์˜ ์„ ํ–‰ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ ์‚ฝ์ž…ํ•  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

 

6. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

6-1. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ƒ์„ฑ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef struct listNode {        //์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ๊ตฌ์กฐ ์ •์˜
    int data[10];
    struct listNode* link;
} listNode;
 
typedef struct {            //๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋“œ ๋…ธ๋“œ ๊ตฌ์กฐ ์ •์˜
    listNode* head;
} headNode;
 
headNode createLinkedList(void) {    //์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
    headNode* H;
    H = (headNode*)malloc(sizeof(headNode*));
    H -> head = NULL;
    return head;
}
cs

1๋ผ์ธ: typedef struct ์„ ์–ธ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.

2๋ผ์ธ: ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ๋Š” intํ˜• [10]์˜ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค.

3,4๋ผ์ธ: struct listNode* link;

๋งํฌ ํ•„๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— listNodeํ˜• ํฌ์ธํ„ฐ๋กœ ์ •์˜ํ•œ๋‹ค. listNodeํ˜• ํฌ์ธํ„ฐ๋Š” listNode ์ „์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

6~8๋ผ์ธ: ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ์•ž์€ ์ผ๋ฐ˜์ ์œผ๋กœ 'ํ—ค๋“œ ๋…ธ๋“œ'๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ํ—ค๋“œ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ๊ฐ€ ํ•„์š” ์—†๊ณ  ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•œ ๋งํฌ ํ•„๋“œ๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ listNodeํ˜• ํฌ์ธํ„ฐ๋กœ ์ •์˜ํ•œ๋‹ค.

10๋ผ์ธ: createLinkedList()๋Š” ํ—ค๋“œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (๋นˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

11๋ผ์ธ: ํ—ค๋“œ ๋…ธ๋“œ(headNode)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ H๋ฅผ ์„ ์–ธํ•œ๋‹ค.

12๋ผ์ธ: ํ—ค๋“œ ๋…ธ๋“œ(headNode)์˜ ํฌ๊ธฐ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›์•„ ๊ทธ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ H์— ์ €์žฅํ•œ๋‹ค.

13๋ผ์ธ: H์˜ ๋งํฌ ํ•„๋“œ์ธ head์—๋Š” ์•„์ง ๊ฐ€๋ฆฌํ‚ฌ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ null์„ ํ• ๋‹นํ•œ๋‹ค.

 

ํ—ค๋“œ ๋…ธ๋“œ์˜ ์ƒ์„ฑ(๋นˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

 

6-2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰์— ๋…ธ๋“œ ์‚ฝ์ž…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void addNode(headNode* H, int x) {    //๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์‚ฝ์ž…
    listNode* newNode;
    listNode* lastNode;
    newNode = (listNode*)malloc(sizeof(listNode));
    newNode -> data = x;
    newNode -> link = NULL;
 
    if(H -> head == NULL) {        //ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ
        H -> head = newNode;
        return;
    }
 
    lastNode = H -> head;
    while(lastNode -> link != NULL) lastNode = lastNode -> link;
    lastNode -> link = newNode;
}
cs

2๋ผ์ธ: ์‚ฝ์ž…ํ•  ์‹ ๊ทœ ๋…ธ๋“œ๋ฅผ newNode๋กœ ์ •์˜ํ•œ๋‹ค.

3๋ผ์ธ: ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ lastNode๋กœ ์ •์˜ํ•œ๋‹ค.

4๋ผ์ธ: newNode = (listNode*)malloc(sizeof(listNode));

newNode์˜ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋ฐ›์•„ ์ฃผ์†Œ๊ฐ’์„ newNode์— ์ €์žฅํ•œ๋‹ค.

5,6๋ผ์ธ: newNode์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ์— x๋ฅผ ์ €์žฅํ•˜๊ณ  ๋งํฌ ํ•„๋“œ๋Š” ์•„์ง ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’(๋…ธ๋“œ)์ด ์—†์œผ๋ฏ€๋กœ NULL์„ ํ• ๋‹นํ•œ๋‹ค.

ํ•œ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ•„๋“œ์— 100์„ ์‚ฝ์ž…ํ•œ ๋ชจ์Šต. ์ฃผ์†Œ๊ฐ’ 5000์€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์ž„์˜์˜ ๊ฐ’์ด๋‹ค.

8๋ผ์ธ: ํ˜„์žฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ํ—ค๋“œ ๋…ธ๋“œ H๊ฐ€ newNode๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ๋งํฌ ํ•„๋“œ์— newNode์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

 

ํ—ค๋“œ ๋…ธ๋“œ์—์„œ newNode๋ฅผ ์—ฐ๊ฒฐํ•œ ๋ชจ์Šต

13,14๋ผ์ธ: ํ˜„์žฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ณต๋ฐฑ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. ํ—ค๋“œ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ(H -> head) ๋งํฌ๋ฅผ ๋”ฐ๋ผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค. ๋‹ค์Œ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ NULL์ด ์•„๋‹ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต(while(lastNode -> link != NULL))ํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.

15๋ผ์ธ: ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ ํ•„๋“œ์— newNode์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ newNode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

 

์ด addNode ํ•จ์ˆ˜์— x๋ฅผ ๊ฐ๊ฐ 200, 300์œผ๋กœ ๋‘ ๋ฒˆ ๋” ํ˜ธ์ถœํ•˜๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์•„๋ž˜์˜ ๋ชจ์Šต์ด ๋œ๋‹ค.

 

์ฃผ์†Œ๊ฐ’์€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์ž„์˜์˜ ๊ฐ’์ด๋‹ค.

 

6-3. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์‚ญ์ œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void deleteNode(headNode* H) {        //๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์‚ญ์ œ ์—ฐ์‚ฐ
    listNode* prevNode;
    listNode* delNode;
    if(H -> head == NULLreturn;    //๋นˆ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ ์‚ญ์ œํ•  ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒ
    if(H -> head -> link == NULL) {    //๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ์ธ ๊ฒฝ์šฐ
        free(H -> head);    //๊ทธ ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
        H -> head = NULL;
        return;
    }
    else {                //๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ
        prevNode = H -> head;
        delNode = H -> head -> link;
        while(delNode -> link != NULL) {
            prevNode = delNode;
            delNode = delNode -> link;
        }
        free(delNode);
        prevNode -> link = NULL;
    }
}
cs

2๋ผ์ธ: ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์„ ํ–‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋ณ€์ˆ˜

3๋ผ์ธ: ์‚ญ์ œํ•  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋ณ€์ˆ˜

4๋ผ์ธ: if(H -> head == NULL)

    ๋นˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ ์‚ญ์ œํ•  ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒ

5~9๋ผ์ธ: if(H -> head -> link == NULL)

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค. free() ํ•จ์ˆ˜๋กœ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™ ์˜์—ญ์— ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ—ค๋“œ ๋…ธ๋“œ์˜ ๋งํฌ ํ•„๋“œ์— NULL ํ• ๋‹น

10๋ผ์ธ: ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ

11๋ผ์ธ: ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์„ ํ–‰ ๋…ธ๋“œ๋ฅผ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋กœ ์ง€์ •

12๋ผ์ธ: ์‚ญ์ œํ•  ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ๋กœ ์ง€์ •

13~16๋ผ์ธ: ๋งํฌ ํ•„๋“œ๊ฐ€ NULL์ด ์•„๋‹ ๋•Œ ๊นŒ์ง€ prevNode์™€ delNode๋ฅผ ๋’ค๋กœ ํ•œ ์นธ์”ฉ ์ด๋™

17๋ผ์ธ: while๋ฌธ์—์„œ ๋‚˜์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ(์‚ญ์ œํ•  ๋…ธ๋“œ)๋ฅผ ์ฐพ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

18๋ผ์ธ: ์„ ํ–‰ ๋…ธ๋“œ์˜ ๋งํฌ ํ•„๋“œ์— NULL ํ• ๋‹น

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ดˆ๊ธฐ ์ƒํƒœ์™€ ์‚ญ์ œ ๊ฒฐ๊ณผ

  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ€ ์œ„์™€ ๊ฐ™๋‹ค๋ฉด 13~16๋ผ์ธ์˜ while๋ฌธ์„ 1๋ฒˆ ๋Œ์•„ prevNode์™€ delNode๋Š” ๊ฐ๊ฐ ์ฃผ์†Œ๊ฐ€ 5500์ธ ๋…ธ๋“œ, 6000์ธ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค. ์ฃผ์†Œ๊ฐ€ 6000์ธ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  5500์ธ ๋…ธ๋“œ์˜ ๋งํฌ ํ•„๋“œ์— null์ด ํ• ๋‹น๋˜์–ด ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.

 

6-4. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ๋…ธ๋“œ ๋’ค์— ์‚ฝ์ž…

๋‹ค์Œ์€ ์‚ฝ์ž…ํ•  ์„ ํ–‰ ๋…ธ๋“œ(prevNode)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

1
2
3
4
5
6
7
8
9
10
void addItNode(headNode* H, listNode* prevNode, int x) {
    listNode* newNode;
    newNode = (listNode*)malloc(sizeof(listNode));
    newNode -> data = x;
    newNode -> link = NULL;
 
    newNode -> link = prevNode -> link;
    prevNode -> link = newNode;
    return;
}
cs

2~5๋ผ์ธ: ์‚ฝ์ž…ํ•  ๋…ธ๋“œ newNode ์ƒ์„ฑ

7๋ผ์ธ: newNode๊ฐ€ ์„ ํ–‰ ๋…ธ๋“œ prevNode์˜ ํ›„ํ–‰ ๋…ธ๋“œ(prevNode -> link)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ

8๋ผ์ธ: prevNode๊ฐ€ newNode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ

 

  ๋งŒ์ผ 7๋ผ์ธ, 8๋ผ์ธ์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ํ›„ํ–‰ ๋…ธ๋“œ(prevNode -> link)๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ newNode์˜ ๋งํฌ ํ•„๋“œ ๋จผ์ € ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

 

โ‘  ์‚ฝ์ž…ํ•  newNode ์ƒ์„ฑ

โ‘ก newNode์˜ ๋งํฌ ํ•„๋“œ๊ฐ€ prevNode์˜ ๋งํฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ

โ‘ข prevNode์˜ ๋งํฌํ•„๋“œ๊ฐ€ newNode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ

 

6-5. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ๋…ธ๋“œ ์‚ญ์ œ

๋‹ค์Œ์€ ์‚ญ์ œํ•  ๋…ธ๋“œ(delNode)์™€ ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์„ ํ–‰ ๋…ธ๋“œ(prevNode)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

1
2
3
4
5
void deleteItNode(headNode* H, listNode* prevNode, listNode* delNode) {
    prevNode -> link = delNode -> link;
    free(delNode);
    return;
}
cs

2๋ผ์ธ: ์‚ญ์ œ ์ „ ์„ ํ–‰ ๋…ธ๋“œ๊ฐ€ ํ›„ํ–‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค. (delNode -> link : ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ํ›„ํ–‰ ๋…ธ๋“œ)

3๋ผ์ธ: ๋…ธ๋“œ๋ฅผ ์‚ญ์ œ(๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜)ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

โ‘  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐ ์ƒํƒœ

โ‘ก prevNode์˜ ๋งํฌ ํ•„๋“œ๊ฐ€ delNode์˜ ๋งํฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ

โ‘ข delNode ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜

 

6-6. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ๋…ธ๋“œ ๊ฒ€์ƒ‰

  ํ—ค๋“œ ๋…ธ๋“œ ๋ถ€ํ„ฐ ํ•˜๋‚˜ ์”ฉ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํŠน์ • ๋…ธ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋นˆ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ์€ ๋นˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

1
2
3
4
5
6
7
8
9
10
void searchNode(headNode* H, int x) {    //๋ฐ์ดํ„ฐ ํ•„๋“œ ๊ฐ’์ด x์ธ ๋…ธ๋“œ ๊ฒ€์ƒ‰
    listNode* tempNode;
    tempNode = H -> head;
    
    while(tempNode -> data != x) {
        tempNode = tempNode -> link;
    }
 
    printf("Search Successful.\n");
}
cs

2๋ผ์ธ: ๋…ธ๋“œ๋“ค์„ ์ฐจ๋ก€๋กœ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ๋…ธ๋“œ ์ •์˜

5~7๋ผ์ธ: ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๋น„๊ต

9๋ผ์ธ: ๋Œ€์ƒ ๋…ธ๋“œ๋ฅผ ์ฐพ์•˜์œผ๋ฉด ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

 

  ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰ํ•œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋“ฑ์˜ ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ๋…ธ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7. ์—ฐ์Šต๋ฌธ์ œ

1. ๋‹ค์Œ ์ค‘ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ํ‹€๋ฆฐ ๊ฒƒ์€?
โ‘  '์ผ์ •ํ•œ ์ˆœ์„œ'์˜ ๋‚˜์—ด
โ‘ก ์–ด๋–ค ์ •์˜์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ '๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ'์˜ ๋‚˜์—ด
โ‘ข ๋ฆฌ์ŠคํŠธ๋ฅผ ํฌ์ธํ„ฐ๋กœ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์— ๋น„ํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
โ‘ฃ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜๊ฐ€ ๋…ผ๋ฆฌ์ ์ธ ์œ„์น˜์™€ ๋™์ผํ•˜๋‹ค.

2. ๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์€ 2๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์ƒ์„ฑ๊ณผ ์—ฐ๊ฒฐ์— ๊ด€ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. [๊ฐ€]์™€ [๋‚˜]์— ์•Œ๋งž์€ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ‘  [๊ฐ€] ListNode* link; [๋‚˜] H = (list_pointer) list_node;
โ‘ก [๊ฐ€] struct ListNode* link; [๋‚˜]  H = (linkedList_h*)malloc(sizeof(linkedList_h*))
โ‘ข [๊ฐ€] struct LinkNode* link; [๋‚˜] H = struct list_node;
โ‘ฃ [๊ฐ€] LinkNode* link; [๋‚˜] H = list_node -> data;

3. ๋‹ค์Œ ์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ํ‹€๋ฆฐ ๊ฒƒ์€?
โ‘  ๋ฐ์ดํ„ฐ๊ฐ€ '๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ' ํ˜น์€ ๋ฆฌ์ŠคํŠธ์— ๋‚˜ํƒ€๋‚˜๋Š” ์›์†Œ๋“ค๊ฐ„์˜ '์˜๋ฏธ์ ์ธ ์ˆœ์„œ'๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
โ‘ก ์›์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ์˜ ๋ฌผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
โ‘ข ์›์†Œ๋“ค์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์ˆœ์„œ๋‚˜ ์œ„์น˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ์›์†Œ๋“ค๊ฐ„์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋งŒ ์œ ์ง€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
โ‘ฃ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. 10๊ณผ 3.14๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด [๊ฐ€]์™€ [๋‚˜]์— ์•Œ๋งž์€ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?

 

์ •๋‹ต โ–ผ

๋”๋ณด๊ธฐ

1 : โ‘ฃ
2 : โ‘ก
3 : โ‘ก
4 : โ‘ฃ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€