πŸ“’ μŠ€νƒ(Stack)

KimdongkiΒ·2024λ…„ 3μ›” 26일

μ•Œκ³ λ¦¬μ¦˜

λͺ©λ‘ 보기
3/8

πŸ“ŒμŠ€νƒ

  • 자료λ₯Ό 보관할 수 μžˆλŠ” μ„ ν˜• ꡬ쑰
  • 단 넣을 λ•ŒλŠ” ν•œ μͺ½ λμ—μ„œ λ°€μ–΄ λ„£μ–΄μ•Ό ν•˜κ³  -> push μ—°μ‚°
  • κΊΌλ‚Ό λ•ŒλŠ” 같은 μͺ½μ—μ„œ 뽑아 κΊΌλ‚΄μ•Ό ν•˜λŠ” μ œμ•½μ΄ 쑴재 -> Pop μ—°μ‚°
  • ν›„μž… μ„ μΆœ(LIFO) νŠΉμ§•μ„ κ°€μ§€λŠ” μ„ ν˜• 자료 ꡬ쑰

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

πŸ“ŒμŠ€νƒ κ΅¬ν˜„ μ’…λ₯˜

  1. 배열을 μ΄μš©ν•œ κ΅¬ν˜„
    Python λ¦¬μŠ€νŠΈμ™€ λ©”μ„œλ“œλ“€μ„ 이용
  2. μ—°κ²° 리슀트λ₯Ό μ΄μš©ν•œ κ΅¬ν˜„
    μ§€λ‚œ κ°•μ˜μ—μ„œ λ§ˆλ ¨ν•œ μ–‘λ°©ν–₯ μ—°κ²° 리슀트 이용

πŸ“Œμ—°μ‚°μ˜ μ •μ˜

  1. size() -> ν˜„μž¬ μŠ€νƒμ— λ“€μ–΄ μžˆλŠ” 데이터 μ›μ†Œμ˜ 수λ₯Ό ꡬ함
  2. isEmpty() -> ν˜„μž¬ μŠ€νƒμ΄ λΉ„μ–΄ μžˆλŠ”μ§€λ₯Ό νŒλ‹¨
  3. push(x) -> 데이터 μ›μ†Œxλ₯Ό μŠ€νƒμ— μΆ”κ°€
  4. pop() -> μŠ€νƒμ˜ 맨 μœ„μ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό 제거 및 λ°˜ν™˜
  5. peek() -> μŠ€νƒμ˜ 맨 μœ„μ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό λ°˜ν™˜ (제거 X)

πŸ“Œλ°°μ—΄ κ΅¬ν˜„

class ArrayStack:
	def __init__(self):
		self.data = []
	def isEmpty(self):
		return self.size() == 0
	def push(self, item):
		self.data.append(item)
	def pop(self):
		return self.data.pop()
	def peek(self):
		return self.data[-1]

πŸ“Œμ–‘λ°©ν–₯ μ—°κ²° 리슀트 κ΅¬ν˜„

from doublylinkedlist import Node
from doublylinkedlist import DoublyLinkedList

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

πŸ“— 과제 정리
Stack 라이브러리
from pythonds.basic.stack import Stack
S = Stack()
μ—°μŠ΅λ¬Έμ œ - μˆ˜μ‹μ˜ κ΄„ν˜Έ μœ νš¨μ„± 검사
μ•Œκ³ λ¦¬μ¦˜ 섀계 - μˆ˜μ‹μ„ μ™Όμͺ½λΆ€ν„° ν•œ κΈ€μžμ”© μ½μ–΄μ„œ
1. μ—¬λŠ” κ΄„ν˜Έλ₯Ό λ§Œλ‚˜λ©΄ μŠ€νƒμ— ν‘Έμ‹œ
2. λ‹«λŠ” κ΄„ν˜Έλ₯Ό λ§Œλ‚˜λ©΄
a. μŠ€νƒμ΄ λΉ„μ–΄ 있으면 μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ μˆ˜μ‹
b. μŠ€νƒμ—μ„œ pop, μŒμ„ μ΄λ£¨λŠ” μ—¬λŠ” κ΄„ν˜ΈμΈμ§€ 검사
-> λ§žμ§€ μ•ŠμœΌλ©΄ μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ μˆ˜μ‹
3. λκΉŒμ§€ κ²€μ‚¬ν•œ ν›„ μŠ€νƒμ΄ λΉ„μ–΄ μžˆμ–΄μ•Ό μ˜¬λ°”λ₯Έ μˆ˜μ‹

0개의 λŒ“κΈ€