ν‹°μŠ€ν† λ¦¬ λ·°

λ°˜μ‘ν˜•

μŠ€νƒ

νŠΉμ •ν•œ 문제λ₯Ό 풀기에 μ ν•©ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λŠ”λ° μ΄μš©λ˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.

μŠ€νƒμ€ 자료(data element)λ₯Ό 보관할 수 μžˆλŠ” (μ„ ν˜•) ꡬ쑰이닀. 단, μŠ€νƒμ—μ„œλŠ” 데이터λ₯Ό 넣을 λ•Œμ—λŠ” ν•œ μͺ½μ—μ„œ λ°€μ–΄ λ„£μ–΄μ•Όν•˜κ³ (pushμ—°μ‚°) κΊΌλ‚Ό λ•Œμ—λŠ” 같은 μͺ½μ—μ„œ 뽑아 κΊΌλ‚΄μ•Όν•˜λŠ”(popμ—°μ‚°) μ œμ•½μ΄ μžˆλ‹€.

μŠ€νƒμ€ ν›„μž…μ„ μΆœ(LIFO : Last-In First-out)의 νŠΉμ§•μ„ κ°€μ§€λŠ” μ„ ν˜• μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

 

μŠ€νƒμ˜ λ™μž‘

 

 

 

 

μŠ€νƒμ—μ„œ λ°œμƒν•˜λŠ” 였λ₯˜

  • λΉ„μ–΄μžˆλŠ” μŠ€νƒμ—μ„œ 데이터 μ›μ†Œλ₯Ό κΊΌλ‚΄λ € ν•  λ•Œ -> μŠ€νƒ μ–Έλ”ν”Œλ‘œμš°(stack underflow)
  • 꽉 μ°¬ μŠ€νƒμ— 데이터 μ›μ†Œλ₯Ό λ„£μœΌλ € ν•  λ•Œ -> μŠ€νƒ μ˜€λ²„ν”Œλ‘œμš°(stack overflow)

 

 

 

 

μŠ€νƒμ˜ 좔상적 자료ꡬ쑰 κ΅¬ν˜„

1. λ°°μ—΄(array)을 μ΄μš©ν•˜μ—¬ κ΅¬ν˜„

  • python λ¦¬μŠ€νŠΈμ™€ λ©”μ„œλ“œλ“€μ„ 이용

2. μ—°κ²° 리슀트(listed list)λ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν˜„

  • 미리 κ΅¬ν˜„ν•΄λ‘” μ–‘λ°©ν–₯ μ—°κ²° 리슀트 이용

 

 

 

μ—°μ‚°μ˜ μ •μ˜

  • size() : ν˜„μž¬ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” 데이터 μ›μ†Œμ˜ 수λ₯Ό ꡬ함
  • isEmpty() : ν˜„μž¬ μŠ€νƒμ΄ λΉ„μ–΄ μžˆλŠ”μ§€λ₯Ό νŒλ‹¨
  • push(x) : 데이터 μ›μ†Œ xλ₯Ό μŠ€νƒμ— μΆ”κ°€
  • pop() : μŠ€νƒμ˜ 맨 μœ„μ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό 제거 (λ˜λŠ” λ°˜ν™˜)
  • peek() : μŠ€νƒμ˜ 맨 μœ„μ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό λ°˜ν™˜ (μ œκ±°ν•˜μ§€ μ•ŠμŒ)

 

 

 

파이썬 리슀트둜 μŠ€νƒ κ΅¬ν˜„ν•˜κΈ°

class ArrayStack:
    # 빈 μŠ€νƒμ„ λ°°μ—΄λ‘œ μ΄ˆκΈ°ν™”
    def __init__(self):
        self.data = [] 
        
    # μŠ€νƒμ˜ 크기
    def size(self):
        return len(self.data)
    
    # 빈 μŠ€νƒ νŒλ‹¨ μ—¬λΆ€
    def isEmpty(self):
        return self.size() == 0
    
    # 데이터 μ›μ†Œ μΆ”κ°€
    def push(self, itme):
        self.data.append(item)
        
    # 데이터 μ›μ†Œ μ‚­μ œ (리턴)
    def pop(self):
        return self.data.pop()
    
    # μŠ€νƒμ˜ κΌ­λŒ€κΈ° μ›μ†Œ λ°˜ν™˜
    def peek(self):
        return self.data[-1]

 

 

 

μ–‘λ°©ν–₯ μ—°κ²° 리슀트둜 μŠ€νƒ κ΅¬ν˜„ν•˜κΈ°

class LinkedListStack:
    # λΉ„μ–΄μžˆλŠ” μ–‘λ°©ν–₯ 리슀트둜 μ΄ˆκΈ°ν™”
    def __init__(self):
    self.data = DoublyLinkedList()

    # μŠ€νƒμ˜ 크기 λ°˜ν™˜
    def size(self):
        return self.data.getLength()

    # μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ”μ§€ 확인
    def isEmpty(self):
        return self.size() == 0

    # μŠ€νƒμ— 데이터 μΆ”κ°€
    def push(self, item):
        # λ…Έλ“œλ₯Ό μƒˆλ‘œ λ§Œλ“¬
        node = Node(item)
        # λ§ˆμ§€λ§‰ μžλ¦¬μ— 데이터λ₯Ό λ„£κ²Œ λœλ‹€
        self.data.insertAt(self.size() + 1, node)

    # μŠ€νƒμ— 데이터 μ‚­μ œ ν›„ λ°˜ν™˜
    def pop(self):
        return self.data.popAt(self.size())

    # μŠ€νƒμ˜ 맨 κΌ­λŒ€κΈ°μ˜ 데이터 λ°˜ν™˜
    def peek(self):
        return self.data.getAt(self.size()).data

 

 

 

μ°Έκ³ 

from pythons.basic.stack import Stack

S = Stack() μŠ€νƒ μ΄ˆκΈ°ν™”

dir(S) μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ“€ 확인

 

λ°˜μ‘ν˜•
λŒ“κΈ€