์คํ
์ด์ ์๊ฐ์ ์ผ๋ฐ ๋ฐฐ์ด๊ณผ ๋์ ๋ฐฐ์ด๋ก '์คํ'์ด๋ผ๋ ADT๋ฅผ ๊ตฌํํ๋ค.
๋งํฌ๋ ๋ฆฌ์คํธ๋ก ์คํ ๊ตฌํ
push : ๋งจ ์์ ํญ๋ชฉ์ ์ฝ์ ํ๋ ๊ฒ์ผ๋ก ๊ตฌํํ๋ค.
- ์ ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ
- head์ ํฌ์ธํฐ์ ์๋ ์ฃผ์๊ฐ์ ๊ฐ์ ธ์ค๊ณ
- ์ ๋ ธ๋์ ํฌ์ธํฐ์ ๊ฐ์ ธ์จ ์ฃผ์๊ฐ์ ๋ฃ๊ณ
- ์์ ์ ์ฃผ์๊ฐ์ head์๊ฒ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
pop : ์ฒซ ๋ ธ๋(header/top node)๋ฅผ ์ญ์ ํ๋๊ฒ์ผ๋ก ๊ตฌํํ๋ค.
- ์์ ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ
- head๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ์์ ๋ ธ๋์ ํฌ์ธํฐ์ ํ ๋น.
- ํ ๋ ธ๋์ ๊ฐ๊ณผ ํ ๋ ธ๋์ ํฌ์ธํฐ์ ์๋ ์ฃผ์๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- ํค๋ํฌ์ธํฐ๋ฅผ ํ๋ ธ๋์์ ๊ฐ์ ธ์จ ํฌ์ธํฐ๋ก ๋ฐ๊พธ๊ณ
- ์์ ๋ ธ๋๊ฐ ๊ฐ์ง๊ณ ์๋ ํ ๋ ธ๋์ ์ฃผ์๊ฐ์ free()ํด์ฃผ๊ณ
- 3๋ฒ์ ํ ๋ ธ๋ ์์ ์๋ ๊ฐ์ ๋ฐํ.
์ ์ฒด ์ญ์
์ด ๋ฐฉ๋ฒ์ ์ฌ์ค ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๋ค.
(์ ๋ฒ์๊ฐ์ ๋
ธํธ๋ฅผ ์ํด์ ์ฌ๊ธฐ๋ค๊ฐ ํจ)
- ์์ ํฌ์ธํฐ๋ฅผ ๋ง๋ค์ด ํ๋ ธ๋์ ์ฃผ์๊ฐ์ ๊ฐ์ ธ์ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
- ํค๋ํฌ์ธํฐ๋ฅผ ๊ทธ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ
- ์์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด free()ํด์ 1๋ฒ์์ ๊ฐ์ ธ์จ ํ๋ ธ๋๋ฅผ ์ง์ด๋ค
- ์ด ๊ณผ์ ์ ํค๋ํฌ์ธํฐ๊ฐ null์ผ๋ ๊น์ง.
void clearStack(Node **head_ptr) {
Node *head = *head_ptr;
Node *temp = NULL;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
*head_ptr = NULL;
}