[특징]
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()메소드를 반드시 구현해 주어야 한다.
'자료구조&알고리즘' 카테고리의 다른 글
swift로 구현한 선택(Selection Sort), 버블(Bubble Sort), 삽입(Insertion Sort) 정렬 (0) | 2020.07.21 |
---|---|
swift로 구현한 연결리스트(Linked List) (0) | 2020.07.14 |
swift로 큐 구현하기 (0) | 2020.07.13 |