사진과 음악을 좋아하는 개발자 지망생의 블로그

스택(Stack) 본문

CS/자료구조 & 알고리즘

스택(Stack)

devculture309 2023. 4. 11. 23:49
반응형

1) 스택(Stack)

  -  자료(Data element)를 단방향을 보관할 수 있는 (선형) 구조 

  - 단방향이므로 자료를 넣고(Push) 꺼낼 때(Pop) 한 쪽으로만 수행해야하는 제약이 있음 => 후입선출(LIFO)

 

  ※ Stack에서 발생하는 오류

    - 비어 있는 스택에서 데이터 원소를 꺼내려 할 때 → Stack Underflow

    -  꽉 찬 스택에 데이터 원소를 넣으려 할 때   Stack Overflow

 

2) 스택의 추상적 자료구조 구현  

  ① 배열(array, list)을 이용하여 구현 Python List 와 method들을 이용

class ArrayStack :
	def size(self) :				# 현재 스택에 들어 있는 데이터 원소의 수
    	return len(self.data)
    
    	def isEmpty(self) :				# 현재 스택이 비어 있는지를 판단
    		return self.size() == 0
   
    	def push(self, item) :				# 데이터 원소 itme을 스택에 추가
    		return self.data.append(item)
    
    	def pop(self) :					# 스택의 맨 위에 저장된 데이터 원소를 제거 및 반환
    		return self,data.pop()
    
    	def peek(self) :				# 스택의  맨 위에 저장된 데이터 원소를 반환 (제거 X)
    		return self.data[-1]

  ② 연결 리스트(Linked List)를 이용하여 구현  양방향 연결 리스트 이용

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
  
 
반응형