자료구조&알고리즘

swift로 큐 구현하기

momo_9 2020. 7. 13. 19:16

[특징]

1. FIFO(First-In-First-Out)

2. 주요 method

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

 - dequeue() : 가장 앞의 요소 삭제 및 반환

 - peek() : 가장 앞의 요소 삭제 없이 반환만

3. 프로퍼티

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

 - capacity : 큐 용량 반환

4. 추가 method

 - isEmpty() : 큐가 비어있는 지 확인

 - isFull() : 큐가 꽉 차 있는 지 확인

 - clear() :  빈 값으로 재설정

5. 추가 프로토콜

 - CustomStringConvertible, CustomDebugStringConvertible : 상세정보 출력

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

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

 - MutableCollection : 서브스크립트 문법 사용 가능('[] =' 표현 이용해서 값 삽입 및 수정 가능)

6. 활용

 - 입력된 순서대로 데이터를 처리할 때 보편적으로 활용되는 방법으로 주로 주문 및 계산에 사용되는 POS 시스템이 대표적이다.

 

 

1) 먼저 2, 3, 4번에 설명된 프로퍼티와 메소드를 구현하는 Queue구조체를 만들어 보자.

 

 

 

2) 다음으로 사용편의를 위해 프로토콜을 추가해보자.

아래 프로토콜들에 대한 설명은 이전 게시물인 Stack을 참고하면 된다.

 

 

 

3) 다음으로 내가 만든 큐에 서브스크립트 문법 사용할 수 있도록 MutableCollection 프로토콜을 추가해보자.

arr[0] = 1 와 같은 표현으로 큐의 데이터를 쓰고 읽을 수 있게 해준다.

 

MutableCollection 프로토콜은 아래의 프로퍼티와 메소드를 반드시 구현해주어야 한다.
 [1] startIndex, endIndex 프로퍼티를 제공해야 한다
 [2] 내부에서 인덱스를 증가시키기 위해 index(after: )를 구현해야 한다.
 [3] 인덱스를 이용해 구성요소를 접근하는 subscript(index:)를 구현해야 한다. 최소한 읽기전용으로 반드시 구현해야 함.