์Šคํƒ(Stack)์ด๋ž€?

๋จผ์ € ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ผ ๋‚˜์ค‘์— ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • FILO(First In Last Out) : ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๋Š” ๊ทœ์น™
  • push : ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ / pop : ์Šคํƒ์—์„œ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ

 

์Šคํƒ์˜ ๋™์ž‘์›๋ฆฌ

์ดˆ๊ธฐ ๋นˆ ์Šคํƒ์— ๋ฐ์ดํ„ฐ'1'๊ณผ ๋ฐ์ดํ„ฐ'2' push
popํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ'2' ์ œ๊ฑฐ
๋ฐ์ดํ„ฐ'3'์„ pushํ•˜๋ฉด ๋ฐ์ดํ„ฐ'1' ์œ„์— ์œ„์น˜
2๋ฒˆ ์—ฐ์†์œผ๋กœ pop์„ ํ•˜๋ฉด '3' → '1' ์ˆœ์„œ๋กœ ์ œ๊ฑฐ

 

์Šคํƒ์˜ ADT (Abstract Data Type)

์ถ”์ƒ ์ž๋ฃŒํ˜•์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์žˆ๊ณ  ์‹ค์ œ๋กœ ๊ตฌํ˜„์€ ๋˜์ง€์•Š์€ ์ž๋ฃŒํ˜•

๊ตฌ๋ถ„ ์ •์˜ ์„ค๋ช…
์—ฐ์‚ฐ boolean isFull() ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ maxsize์ธ์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋ฉด True / ์•„๋‹ˆ๋ฉด False)
boolean isEmpty() ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด False / ์•„๋‹ˆ๋ฉด True)
void push(Item Tyoe item) ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œ
ItemType pop() ์Šคํƒ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
์ƒํƒœ Int top ์Šคํƒ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
ItemType data[maxsize] ์Šคํƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฐ์—ด (์ตœ๋Œ€ maxsize๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ)

 

์Šคํƒ์˜ ์„ธ๋ถ€๋™์ž‘

์Šคํƒ์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ
์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)
์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ (pop)

 

 

์Šคํƒ ๊ตฌํ˜„ํ•˜๊ธฐ

stack = []          # ์Šคํƒ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
max_size = 10       # ์Šคํƒ์˜ ์ตœ๋Œ€ํฌ๊ธฐ

# ์Šคํƒ์ด ๊ฐ€๋“์ฐผ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
def isFull(stack):
    return len(stack) == max_size

# ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
def isEmpty(stack):
    return len(stack) == 0

# ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜
def push(stack, item):
    if isFull(stack):
        print("์Šคํƒ์ด ๊ฐ€๋“ ์ฐผ์Šต๋‹ˆ๋‹ค.")
    else:
        stack.append(item)
        print("๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")

# ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ํ•จ์ˆ˜
def pop(stack):
    if isEmpty(stack):
        print("์Šคํƒ์ด ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค.")
        return None
    else:
        return stack.pop()

 

  • ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์‹ค์ œ ์ฝ”๋“œ์—์„œ max_size, isFull(), isEmpty() ํ•จ์ˆ˜ ๊ตฌํ˜„ X
  • push(), pop() ํ•จ์ˆ˜๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋ฏ€๋กœ ๊ตณ์ด ๊ตฌํ˜„ X
  • ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ์–ด์„œ ์‚ฌ์šฉ
stack = []

# ์Šคํƒ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
stack.append(1)
stack.append(2)
stack.append(3)

# ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
top_element = stack.pop()	# top_element = 3
next_element = stack.pop()	# next_element = 2

# ์Šคํƒ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ
stack_size = len(stack)

 

→ ์Šคํƒ์˜ ๊ฐœ๋… ์ž์ฒด๋Š” ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์Šคํƒ์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ์—ฐ์Šต์ด ํ•„์š” !!


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

+ Recent posts