์Šคํƒ 3 (์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)

8/5/2025

์Šคํƒ

์ด์ „ ์‹œ๊ฐ„์— ์ผ๋ฐ˜ ๋ฐฐ์—ด๊ณผ ๋™์  ๋ฐฐ์—ด๋กœ '์Šคํƒ'์ด๋ผ๋Š” ADT๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ์Šคํƒ ๊ตฌํ˜„

push : ๋งจ ์•ž์— ํ•ญ๋ชฉ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

  1. ์ƒˆ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ 
  2. head์˜ ํฌ์ธํ„ฐ์— ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ 
  3. ์ƒˆ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ์— ๊ฐ€์ ธ์˜จ ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ๊ณ 
  4. ์ž์‹ ์˜ ์ฃผ์†Œ๊ฐ’์„ head์—๊ฒŒ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

pop : ์ฒซ ๋…ธ๋“œ(header/top node)๋ฅผ ์‚ญ์ œํ•˜๋Š”๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

  1. ์ž„์‹œ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ 
  2. head๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ’์„ ์ž„์‹œ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ์— ํ• ๋‹น.
  3. ํƒ‘ ๋…ธ๋“œ์˜ ๊ฐ’๊ณผ ํƒ‘ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ์— ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  4. ํ—ค๋“œํฌ์ธํ„ฐ๋ฅผ ํƒ‘๋…ธ๋“œ์—์„œ ๊ฐ€์ ธ์˜จ ํฌ์ธํ„ฐ๋กœ ๋ฐ”๊พธ๊ณ 
  5. ์ž„์‹œ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ํƒ‘ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ free()ํ•ด์ฃผ๊ณ 
  6. 3๋ฒˆ์˜ ํƒ‘ ๋…ธ๋“œ ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜.

์ „์ฒด ์‚ญ์ œ

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

  1. ์ž„์‹œ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ํƒ‘๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
  2. ํ—ค๋“œํฌ์ธํ„ฐ๋ฅผ ๊ทธ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๊ณ 
  3. ์ž„์‹œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด free()ํ•ด์„œ 1๋ฒˆ์—์„œ ๊ฐ€์ ธ์˜จ ํƒ‘๋…ธ๋“œ๋ฅผ ์ง€์šด๋‹ค
  4. ์ด ๊ณผ์ •์„ ํ—ค๋“œํฌ์ธํ„ฐ๊ฐ€ 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;
}