자료구조&알고리즘

swift로 stack 구현하기

momo_9 2020. 7. 11. 13:56

[특징]

1. LIFO(Last-In-First-Out)

2. 주요 method

 - push() : 새로운 데이터 삽입

 - pop() : 가장 마지막 데이터 삭제 및 반환

 - peek() : 가장 마지막 요소 삭제 없이 반환만

3. 프로퍼티

 - count  : 스택에 저장된 데이터 갯수 반환

4. 추가 method

 - isEmpty() : 스택이 비어있는 지 확인

 - isFull() : 스택이 꽉 차 있는 지 확인

5. 추가 프로토콜

 - CustomStringConvertible, CustomDebugStringConvertible : 상세정보 출력

 - ExpressibleByArrayLiteral : []를 이용해서 초기화 가능

 - IteratorProtocol, Sequence : for...in 구문 사용 가능

6. 활용

 - 표현식(expression)평가 및 표현식 문법 파싱, 정수형 데이터의 이진수 변환, 역추적 알고리즘, 실행취소/재실행(undo-redo) 기능

 

 

1) 먼저 2, 3, 4번에 적혀있는 메소드와 프로퍼티를 포함하는 Stack 구조체를 만들어 준다. 

 

 

 

2) 이것만으로도 스택을 사용할 수 있지만 사용 편의를 위해 유용한 프로토콜을 추가해 보자

 

 

[1] CustomStringConvertible, CustomDebugStringConvertible 프로토콜

CustomStringConvertible프로토콜은 description, CustomDebugStringConvertible프로토콜은 debugDescription을 반드시 구현해 주어야 한다. 이 두 프로토콜은 내가 원하는대로 스택에 대한 정보를 출력할 수 있게 해준다.

 

 

 

[2] ExpressibleByArrayLiteral 프로토콜

[]를 이용하여 초기화 할 수 있도록 배열 형태의 표현을 사용할 수 있게 해주는 프로토콜이다

 

 

 

[3] IteratorProtocol, Sequence 프로토콜

IteratorProtocol은 next()메소드를 이용해서 데이터를 하나씩 순환하게 해주는 프로토콜이다. 

Sequence는 for...in 구문을 사용하게 해주는 프로토콜이다. 따라서 내가 만든 스택에 for...in 구문을 사용하고 싶다면 이 2프로토콜을 모두 구현해주어야 한다. IteratorProtocol은 next()메소드를 반드시 구현해 주어야 한다.