list
์ฐ๊ฒฐ ๋ฆฌ์คํธ(list)์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค.
๊ตฌ์กฐ์ฒด ์ด๋ฆ: list
๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ:
size: ๋ฆฌ์คํธ์ ์ ์ฅ๋ ๋ ธ๋์ ์
front: ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
back: ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ , ๊ฒ์ ๋ฑ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. Darknet ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ด๋ฌํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ ์ด์ด๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌํ๊ฑฐ๋, ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋๋ฐฐ์น๋ก ๋ถํ ํ ํ ๊ฐ๊ฐ์ ๋ฏธ๋๋ฐฐ์น๋ฅผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
make_list
ํจ์ ์ด๋ฆ: make_list ์ ๋ ฅ:
์์
๋์:
๋น ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํจ
์ค๋ช :
๋ฆฌ์คํธ ๊ตฌ์กฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ๊ณ , size, front, back ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํํ์ฌ ๋น ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
list_pop
ํจ์ ์ด๋ฆ: list_pop
์ ๋ ฅ:
list ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ๋ณ์ l
๋์:
๋ฆฌ์คํธ l์์ ๋ค์ชฝ์ ์๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ ํด๋น ๋ ธ๋์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ฐํํ๋ค.
์ค๋ช :
๋ฆฌ์คํธ l์ back ํฌ์ธํฐ๊ฐ NULL์ด๋ฉด, ์ฆ ๋ฆฌ์คํธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด NULL์ ๋ฐํํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฆฌ์คํธ์ back ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ฅผ ๋ณ์ b์ ์ ์ฅํ๊ณ , b์ val ํ๋์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ณ์ val์ ์ ์ฅํ๋ค.
๊ทธ ๋ค์, ๋ฆฌ์คํธ์ back ํฌ์ธํฐ๋ฅผ b์ prev ํ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ก ๋ณ๊ฒฝํ๊ณ , ๋ณ๊ฒฝ๋ back ํฌ์ธํฐ๊ฐ NULL์ด ์๋๋ฉด ํด๋น ๋ ธ๋์ next ํ๋๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ b ๋ ธ๋๋ฅผ ํด์ ํ๊ณ ๋ฆฌ์คํธ์ size๋ฅผ 1 ๊ฐ์์ํจ๋ค. ๋ง์ง๋ง์ผ๋ก val ๋ณ์์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ฐํํ๋ค.
list_insert
ํจ์ ์ด๋ฆ: list_insert
์ ๋ ฅ:
list *l: ์ฝ์ ํ ๋ฆฌ์คํธ์ ํฌ์ธํฐ
void *val: ๋ฆฌ์คํธ์ ์ฝ์ ํ ๊ฐ์ ํฌ์ธํฐ
๋์:
val ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ๋ ธ๋๋ฅผ ์์ฑํ๊ณ ๋ฆฌ์คํธ์ ๋ค์ชฝ์ ์ฝ์ ํ๋ค.
๋ฆฌ์คํธ๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ, ์๋ก์ด ๋ ธ๋๋ฅผ ๋ฆฌ์คํธ์ front๋ก ์ง์ ํ๋ค.
๋ฆฌ์คํธ๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ, ์๋ก์ด ๋ ธ๋๋ฅผ ๋ฆฌ์คํธ์ back ๋ค์์ ์ฐ๊ฒฐํ๋ค.
๋ฆฌ์คํธ์ size๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
์ค๋ช :
์ฃผ์ด์ง ๋ฆฌ์คํธ l์ ๋งจ ๋ค์ชฝ์ val ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ๋ ธ๋๋ฅผ ์์ฑํ๊ณ ์ฝ์ ํ๋ ํจ์์ด๋ค.
๋ฆฌ์คํธ๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ, ์๋ก์ด ๋ ธ๋๋ ๋ฆฌ์คํธ์ front๊ฐ ๋๋ฉฐ, ๋ฆฌ์คํธ๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ, ์๋ก์ด ๋ ธ๋๋ ๋ฆฌ์คํธ์ back ๋ค์์ ์ฐ๊ฒฐ๋๋ค.
์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ฉด ๋ฆฌ์คํธ์ size๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
free_node
ํจ์ ์ด๋ฆ: free_node
์ ๋ ฅ:
n: node ํฌ์ธํฐ
๋์:
n์ ์์์ผ๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค.
์ค๋ช :
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ ์์ ๋ ธ๋์ ํฌ์ธํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ผ๋ฉฐ, ์ ๋ ฅ๋ ๋ ธ๋๋ถํฐ ์์ํ์ฌ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ณ์ํด์ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ฐ ๋ ธ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค.
๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ NULL์ด ๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
free_list
ํจ์ ์ด๋ฆ: free_list
์ ๋ ฅ:
l: list ํฌ์ธํฐ
๋์:
l์ด ๊ฐ๋ฆฌํค๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํด์ ํ๊ณ , ๋ฆฌ์คํธ ์์ฒด๋ ํด์ ํจ.
์ค๋ช :
ํด๋น ํจ์๋ ๋์ ์ผ๋ก ํ ๋น๋ list ๊ตฌ์กฐ์ฒด์ ๊ทธ ์์ ์๋ ๋ชจ๋ node ๊ตฌ์กฐ์ฒด๋ฅผ ํด์ ํ๋ ํจ์์ด๋ค.
l์ด ๊ฐ๋ฆฌํค๋ ๋ฆฌ์คํธ์ ๋งจ ์ ๋ ธ๋์ธ front๋ถํฐ ์์ํ์ฌ ๋ชจ๋ ๋ ธ๋์ val ๋ฉค๋ฒ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จผ์ ํด์ ํ๊ณ , ๊ทธ ๋ค์์ ๊ฐ ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ฆฌ์คํธ ์์ฒด๋ฅผ ํด์ ํ๋ค.
free_list_contents
ํจ์ ์ด๋ฆ: free_list_contents
์ ๋ ฅ:
l: ํด์ ํ list์ ํฌ์ธํฐ
๋์:
list์ ์๋ ๋ชจ๋ ๋ ธ๋์ val ๋ฉค๋ฒ๋ฅผ free() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด์ ํ๋ค.
์ค๋ช :
list ์๋ฃ๊ตฌ์กฐ๋ node์ ํฌ์ธํฐ์ size ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ฐ node๋ val ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด ํจ์๋ list์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๋ฉด์ ๊ฐ ๋ ธ๋์ val ๋ฉค๋ฒ๋ฅผ ํด์ ํ๋ค.
list_to_array
ํจ์ ์ด๋ฆ: list_to_array
์ ๋ ฅ:
l: list ํฌ์ธํฐ
๋์:
์ฐ๊ฒฐ ๋ฆฌ์คํธ l์ ๊ฐ ๋ ธ๋์ ๊ฐ์ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ , ํด๋น ๋ฐฐ์ด์ ๋ฐํํ๋ค.
์ค๋ช :
ํจ์๋ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฐฐ์ด์ ๋ฐํํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ๋์ ํด๋น ๋ฐฐ์ด์ free ํด์ฃผ์ด์ผ ํ๋ค.
ํจ์๋ ๋จผ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ l์ ํฌ๊ธฐ์ ํด๋นํ๋ void ํฌ์ธํฐ ๋ฐฐ์ด a๋ฅผ ํ ๋นํ๊ณ , ๋ฆฌ์คํธ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ๋ฉฐ ๊ฐ ๋ ธ๋์ ๊ฐ์ ๋ฐฐ์ด a์ ์ ์ฅํ๋ค. ์ดํ ๋ฐฐ์ด a๋ฅผ ๋ฐํํ๋ค.
Last updated
Was this helpful?