🧩 μŠ€νƒ(Stack) : 데이터λ₯Ό 순차적으둜 μŒ“μ•„ 적재된 λ°μ΄ν„°λ‘œλΆ€ν„° κΊΌλ‚΄ μ“Έ 수 μžˆλ„λ‘ 자료λ₯Ό 정리해놓은 ν˜•νƒœ

  • Push : 데이터λ₯Ό λ„£λŠ” μž‘μ—… + Pop : 데이터λ₯Ό λΉΌλŠ” μž‘μ—…
  • ν›„μž…μ„ μΆœ or LIFO (last in, first out)
  • κ°€μž₯ λ‚˜μ€‘μ— μŒ“μ€ μŠ€νƒμ΄ κ°€μž₯ λ¨Όμ € μ“°μ΄λŠ”κ²Œ 핡심 βœ…

1 μ‹€μƒν™œμ—μ„œ μŠ€νƒ

πŸ“Ž μ›ΉλΈŒλΌμš°μ € λ’€λ‘œκ°€κΈ°

  • μ›ΉνŽ˜μ΄μ§€ 방문정보 : κ³„μ†ν•΄μ„œ μŠ€νƒμ— μŒ“μž„
  • λ’€λ‘œκ°€κΈ°λ²„νŠΌ β†’ κ°€μž₯ λ§ˆμ§€λ§‰μ— λ°©λ¬Έν•œ νŽ˜μ΄μ§€λ‘œ 이동

2 μŠ€νƒν˜•νƒœ

🧩 μŠ€νƒμžλ£Œκ΅¬μ‘° : λ°μ΄ν„°μ˜ μΆœμž…κ³΅κ°„μ΄ ν•˜λ‚˜μΈ λ§‰νžŒν˜•νƒœ

  • μž…κ΅¬μ™€ μΆœκ΅¬κ°€ κ°™μŒ β†’ λ¨Όμ €λ“€μ–΄κ°„ 것이 κ°€μž₯ λ‚˜μ€‘μ— λ‚˜μ˜΄ βœ…

3 μŠ€νƒνŠΉμ§•

  • 데이터λ₯Ό μ €μž₯ν•  λ©”λͺ¨λ¦¬ 곡간 β†’ 미리 μ •ν•΄μ ΈμžˆμŒ βœ…
    • (= μ„ ν˜•λ¦¬μŠ€νŠΈ)
  • ν›„μž…μ„ μΆœ (LIFO, Last in First out)
  • λ§ˆμ§€λ§‰μ— μ €μž₯된 데이터 β†’ TOP
ꡬ뢄결과
μŠ€νƒ Empty β†’ μžλ£ŒκΊΌλƒ„μŠ€νƒμ–Έλ”ν”Œλ‘œμš° Error λ°œμƒ
μŠ€νƒ Full β†’ μžλ£ŒκΊΌλƒ„μŠ€νƒμ˜€λ²„ν”Œλ‘œμš° Error λ°œμƒ

4 μŠ€νƒμ›λ¦¬

  • Push : 데이터λ₯Ό λ„£λŠ” μž‘μ—… + Pop : 데이터λ₯Ό λΉΌλŠ” μž‘μ—…
  • μŠ€νƒμ—μ„œ Push 및 Pop β†’ Topμ—μ„œ μˆ˜ν–‰λ¨


5 μŠ€νƒκ΅¬ν˜„

1️⃣ μŠ€νƒμƒμ„±

πŸ“ μŠ€νƒμ •μ˜
>>> stack = [None, None, None] # 미리곡간 μ§€μ •
>>> top = -1 # μ΄ˆκΉƒκ°’

2️⃣ Push

πŸ“ μ²«λ²ˆμ§Έλ°μ΄ν„°
>>> top += 1 # pushν• λ•Œ λ°˜λ“œμ‹œ top + 1
>>> stack[top] = "cuk.edu" # λ°μ΄ν„°μ‚½μž…

πŸ“ λ‘λ²ˆμ§Έλ°μ΄ν„°
>>> top += 1
>>> stack[top] = "naver.com"

πŸ“ μ„Έλ²ˆμ§Έλ°μ΄ν„°
>>> top += 1
>>> stack[top] = "google.com"

πŸ“ stack 좜λ ₯
>>> for i in range(len(stack)-1, -1, -1):
		print(stack[i])
        # google.com naver.com cuk.edu

3️⃣ Pop

πŸ“ top[2] pop
>>> data = stack[top] # ν˜„μž¬μ˜ topμ—μ„œ μΆ”μΆœ, top = 2
>>> stack[top] = None # pop된 데이터 -> None 처리
>>> top -= 1
>>> print(data) # google.com

πŸ“ top[1] pop
>>> data = stack[top] # ν˜„μž¬μ˜ topμ—μ„œ μΆ”μΆœ, top = 1
>>> stack[top] = None # pop된 데이터 -> None 처리
>>> top -= 1
>>> print(data) # naver.com

πŸ“ top[0] pop
>>> data = stack[top] # ν˜„μž¬μ˜ topμ—μ„œ μΆ”μΆœ, top = 0
>>> stack[top] = None # pop된 데이터 -> None 처리
>>> top -= 1
>>> print(data) # cuk.edu

6 μŠ€νƒμ΄ˆκΈ°ν™”

>>> SIZE = 3 # μŠ€νƒν¬κΈ°μ§€μ •
>>> stack = [None for _ in range(SIZE)]
>>> top = -1

7 μŠ€νƒν•¨μˆ˜κ΅¬ν˜„

1️⃣ Push

πŸ“ μŠ€νƒμ΄ 꽉 μ°ΌλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜
>>> def isStackFull():
		if (top >= SIZE - 1):
        	return True # μŠ€νƒκ½‰μ°Έ
        else:
        	return False # μŠ€νƒμ—¬μœ 

πŸ“ 데이터λ₯Ό μ‚½μž…ν•˜λŠ” ν•¨μˆ˜
>>> def push(data):
		global SIZE, stack, top
        
        if (isStackFull()):
        	print("μŠ€νƒμ΄ 꽉 μ°ΌμŠ΅λ‹ˆλ‹€.")
            return
        
        top += 1
        stack[top] = data

2️⃣ Pop

πŸ“ μŠ€νƒμ΄ λΉ„μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜
>>> def isStackEmpty():
		if (top == -1):
        	return True
        else:
        	return False

πŸ“ μŠ€νƒμ—μ„œ 데이터λ₯Ό μΆ”μΆœν•˜λŠ” ν•¨μˆ˜
>>> def pop():
		global SIZE, stack, top
        
        if (isStackEmpty()):
        	print("μŠ€νƒμ΄ λΉ„μ—ˆμŠ΅λ‹ˆλ‹€.")
            return None
        
        data = stack[top]
        stack[top] = None
        top -= 1
        return data

3️⃣ Peek

🧩 Peek : top μœ„μΉ˜ 데이터 ν™•μΈλ§Œ ν•˜κ³  μŠ€νƒμ— κ·ΈλŒ€λ‘œ λ‘λŠ” 것

>>> def peek():
		if (isStackEmpty()):
        	print("μŠ€νƒμ΄ λΉ„μ–΄μžˆμŠ΅λ‹ˆλ‹€")
            return None
        return stack[top]

8 μŠ€νƒμ„±λŠ₯

ν•­λͺ©μ‘°νšŒμ‚½μž…μ‚­μ œ
μŠ€νƒO(n)O(1)O(1)
  • Push 및 Pop μž‘μ—… μ‹œ, 데이터 μ‚½μž…ν•  κ³³ μ°Ύμ§€ ❌
  • κ³§λ°”λ‘œ top에 데이터 μ‚½μž… 및 μ‚­μ œ ➑️ O(1)
profile
🐰 I'm Sunyeon-Jeong, mallang

0개의 λŒ“κΈ€