SlideShare a Scribd company logo
1 of 18
Download to read offline
SWIFT
Data Structure -
Queue
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Queue
•Concept
•Features
•Implementation
•References
Queue
큐(Queue)는 스택과 마찬가지로 삽입, 삭제의 위치와 방법이 제한
되어있는 유한 순서 리스트 형태의 자료구조입니다.
스택과 다르게 큐는 한쪽에서는 추가, 다른 한쪽에서는 삭제가 이루
어지느 구조입니다.
큐는 우리 일상 생활에서 특정 장소에서 줄을 서서 대기하는 것과
같은 구조입니다.
즉 먼저 대기한 사람이 가장 먼저 나가는 FIFO(First - In - First
- Out)구조입니다.
Queue
큐(Queue)는 구성하는 방식에 따라서 아래와 같은 방식 등이 있습
니다.
1. Array를 사용해서 큐 구현
2. Doubly Linked List를 사용해 큐 구현
3. Two Stack을 사용해서 큐 구현
4. Ring Buffer를 사용해서 큐 구현
Concept
Array(배열)를 사용한 Queue의 기본 동작 흐름은 아래와 같습니
다.
- 특정 크기의 배열을 초기에 설정
- Enqueue(추가) 속도는 O(1)
- Dequeue(삭제) 시에는 삭제 이후에 있는 요소들이 한칸 앞으로
이동, 속도는 O(n)
- 공간이 꽉차면 2배씩 배열 크기를 늘림, 스위프트의 배열에서는
먼저 크게 늘려놓으니 빈 공간에 추가할 땐 수행속도가 빠름
Concept
Doubly Linked List를 사용한 Queue의 기본 동작 흐름은 아래와
같습니다.
- 링크드 리스트를 활용하여 큐를 구현
- 추가, 삭제 속도가 O(1)으로 빠름
- 삭제 시에 데이터 재정렬 과정이 필요없음
Concept
Two Stack을 사용한 Queue의 기본 동작 흐름은 아래와 같습니
다.
- 두 개의 스택으로 큐를 구현
- Right Stack은 Enqueue, Left Stack은 Dequeue 전용 스택
- 추가(Enqueue) 시에 우측 스택에 추가, 수행 속도는 O(1)
- 삭제(Dequeue) 시에 우측 스택의 요소를 거꾸로 정렬 후 좌측 스
택 이동 후 마지막 요소 삭제(popLast), 수행 속도는 O(1)
Concept
Ring Buffer를 사용한 Queue의 기본 동작 흐름은 아래와 같습니
다.
- 고정된 크기의 배열을 사용
- 배열이 큐의 값들로 가득 차면 다시 첫 번째 아이템으로 돌아옴
- 추가는 Write Index, 삭제는 Read Index를 사용
- 큐의 공간이 꽉차면 더이상 추가 불가
- 크기가 고정되 있어서 큐에 들어오는 값의 개수가 예측 불가능할
경우엔 사용할 수 제한
Features
Queue의 특징을 살펴보면 아래와 같습니다.
- 데이터를 한 곳에서는 삽입 한 곳에서는 삭제가 되는 구조
- FIFO(First In First Out) 방식
- 입력된 순서대로 순차적으로 처리
- 운영체제의 작업 스케줄링 등 순차적인 처리 분야에서 활용
Implementation
Swift를 활용하여 Queue를 구현해보겠습니다. 본 강의에서는 가
장 단순한 구조인 배열을 활용한 큐를 살펴보도록 하겠습니다.
우선 필요한 메소드는 아래와 같습니다.
- init : 리스트를 초기화하는 함수
- enqueue : 데이터 입력
- dequeue : 첫번째 데이터 삭제
- peak : 첫번째 데이터 반환
- removeAll : 모든 데이터 삭제
- count : 현재 리스트의 크기를 반환
- capacity : 리스트의 최대 허용 공간 크기를 반환
- isFull : 리스트가 모두 찼는지 체크
- isEmpty : 현재 리스트의 크기가 비어있는지 체크
Implementation
class Queue<T> {
internal var array = Array<T>()
public init() {}
public func enqueue(_ element: T) {
array.append(element)
}
public func dequeue() -> T? {
return array.removeFirst()
}
public func peek() -> T? {
return array.first
}
public func removeAll() {
array.removeAll()
}
}
Implementation
extension Queue {
public var count: Int {
return array.count
}
public var capacity: Int {
get { return array.capacity }
set { array.reserveCapacity(newValue) }
}
public func isFull() -> Bool {
return count == array.capacity
}
public func isEmpty() -> Bool {
return array.isEmpty
}
}
Implementation
데이터 반복(Iterator) 제어를 위하여 아래의 프로토콜들을 체택합
니다.
public struct QueueIterator<T> : IteratorProtocol {
var currentElement: [T]
public mutating func next() -> T? {
if !self.currentElement.isEmpty {
return currentElement.removeFirst()
}else {
return nil
}
}
}
extension Queue : Sequence {
public func makeIterator() -> QueueIterator<T> {
return QueueIterator(currentElement: self.array)
}
}
Implementation
let queue = Queue<Int>()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.enqueue(4)
queue.enqueue(5)
// 현재 데이터 카운트 : 5
print(queue.count)
// 최대 리스트 크기 : 8 (Swift의 Array는 기본 8개씩 크기를 할당하며 동적으로 2배씩 늘어난다.)
print(queue.capacity)
print(queue.isFull()) // false
for node in queue {
print(node)
// 1
// 2
// 3
// 4
// 5
}
Implementation
queue.enqueue(6)
queue.enqueue(7)
queue.enqueue(8)
print(queue.capacity) // 8
print(queue.isFull()) // true
queue.dequeue() // 첫 번째 요소 삭제
for node in queue {
print(node)
// 2
// 3
// 4
// 5
// 6
// 7
// 8
}
References
[1] [스위프트 : 자료구조] 큐 : Queue : Sequence, Collection
프로토콜 지향 큐 구현하기 : https://the-brain-of-
sic2.tistory.com/39
[2] [Swift 자료구조 ch05] Queue : https://
kor45cw.tistory.com/241
[3] [Swift 자료구조 ch06] Circular Queue : https://
kor45cw.tistory.com/242
[4] Swift로 작성해보는 기본 자료구조 - Stack, Queue :
https://wlaxhrl.tistory.com/87
[5] 자료구조 - 큐(Queue) with Swift : https://
lazyowl.tistory.com/125
References
[6] [자료구조] 큐 Queue / 배열을 이용한 큐의 구현 : https://
ppomelo.tistory.com/57
[7] Swift Algorithm Club: Swift Queue Data Structure :
https://torpedo87.github.io/algorithm/swift-queue-data-
structure.html
[8] [Data Structure] 자료구조 - 큐(Queue) : https://
palpit.tistory.com/145
[9] [자료구조]스택과 큐. (stack and queue) : https://
winplz.tistory.com/entry/자료구조스택과-큐-stack-and-queue
[10] [Data Structure] 자료구조 - 큐(Queue) : https://
palpit.tistory.com/145
Thank you!

More Related Content

What's hot

데이터 분석 2 - 동기부여
데이터 분석 2 - 동기부여데이터 분석 2 - 동기부여
데이터 분석 2 - 동기부여Jaewook Byun
 
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자Jaewook Byun
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리Jaeho Seok
 
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자Jaewook Byun
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약Sung Yub Kim
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabIntae Cho
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기Jaewook Byun
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayListJaewook Byun
 
Data structure review (summer study)
Data structure review (summer study)Data structure review (summer study)
Data structure review (summer study)Melon Lemon
 
Python 강좌 발표 자료
Python 강좌 발표 자료Python 강좌 발표 자료
Python 강좌 발표 자료Soobin Jung
 
말의여행
말의여행말의여행
말의여행mil23
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)Jaewon Lee
 

What's hot (20)

데이터 분석 2 - 동기부여
데이터 분석 2 - 동기부여데이터 분석 2 - 동기부여
데이터 분석 2 - 동기부여
 
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
데이터 분석 4 - 나만의 배열 기반 LIST, MyArrayList를 만들어보자
 
ES6 for Node.js Study 3주차
ES6 for Node.js Study 3주차ES6 for Node.js Study 3주차
ES6 for Node.js Study 3주차
 
[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리[0326 석재호]상호배타적 집합의 처리
[0326 석재호]상호배타적 집합의 처리
 
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
데이터 분석 6 - 나만의 배열 기반 LIST, MyLinkedList를 만들어보자
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList
 
Data structure review (summer study)
Data structure review (summer study)Data structure review (summer study)
Data structure review (summer study)
 
4. stack
4. stack4. stack
4. stack
 
Python 강좌 발표 자료
Python 강좌 발표 자료Python 강좌 발표 자료
Python 강좌 발표 자료
 
말의여행
말의여행말의여행
말의여행
 
강의자료5
강의자료5강의자료5
강의자료5
 
자료구조02
자료구조02자료구조02
자료구조02
 
Lec 00, 01
Lec 00, 01Lec 00, 01
Lec 00, 01
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)
세일즈포스 서울 어드민 그룹 Trigger 연재 강의 (반복문/조건문)
 

Similar to [Swift] Data Structure - Queue

[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - StackBill Kim
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - ArrayBill Kim
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율S.O.P.T - Shout Our Passion Together
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - DequeueBill Kim
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study경 송
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study경 송
 
Collection framework
Collection frameworkCollection framework
Collection frameworkssuser34b989
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
자료구조 스택_큐_링크드리스트
자료구조 스택_큐_링크드리스트자료구조 스택_큐_링크드리스트
자료구조 스택_큐_링크드리스트송미 이
 
android_thread
android_threadandroid_thread
android_threadhandfoot
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin GuideJEONGPHIL HAN
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 Sehyeon Nam
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)Kyoungchan Lee
 
Python + Excel
Python + Excel Python + Excel
Python + Excel POSTECH
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 

Similar to [Swift] Data Structure - Queue (20)

[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - Stack
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - Array
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study
 
Collection framework
Collection frameworkCollection framework
Collection framework
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
자료구조 스택_큐_링크드리스트
자료구조 스택_큐_링크드리스트자료구조 스택_큐_링크드리스트
자료구조 스택_큐_링크드리스트
 
android_thread
android_threadandroid_thread
android_thread
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin Guide
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
 
Python + Excel
Python + Excel Python + Excel
Python + Excel
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
3. stream api
3. stream api3. stream api
3. stream api
 

More from Bill Kim

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting ComparisonBill Kim
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O NotationBill Kim
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell SortBill Kim
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix SortBill Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap SortBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge SortBill Kim
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion SortBill Kim
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble SortBill Kim
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary SearchBill Kim
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)Bill Kim
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVLBill Kim
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)Bill Kim
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)Bill Kim
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary TreeBill Kim
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - TreeBill Kim
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - GraphBill Kim
 
[Swift] Data Structure Introduction
[Swift] Data Structure Introduction[Swift] Data Structure Introduction
[Swift] Data Structure IntroductionBill Kim
 
Design Pattern Introduction
Design Pattern IntroductionDesign Pattern Introduction
Design Pattern IntroductionBill Kim
 

More from Bill Kim (20)

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell Sort
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge Sort
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion Sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary Search
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVL
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 
[Swift] Data Structure Introduction
[Swift] Data Structure Introduction[Swift] Data Structure Introduction
[Swift] Data Structure Introduction
 
Design Pattern Introduction
Design Pattern IntroductionDesign Pattern Introduction
Design Pattern Introduction
 

[Swift] Data Structure - Queue

  • 1. SWIFT Data Structure - Queue Bill Kim(김정훈) | ibillkim@gmail.com
  • 3. Queue 큐(Queue)는 스택과 마찬가지로 삽입, 삭제의 위치와 방법이 제한 되어있는 유한 순서 리스트 형태의 자료구조입니다. 스택과 다르게 큐는 한쪽에서는 추가, 다른 한쪽에서는 삭제가 이루 어지느 구조입니다. 큐는 우리 일상 생활에서 특정 장소에서 줄을 서서 대기하는 것과 같은 구조입니다. 즉 먼저 대기한 사람이 가장 먼저 나가는 FIFO(First - In - First - Out)구조입니다.
  • 4. Queue 큐(Queue)는 구성하는 방식에 따라서 아래와 같은 방식 등이 있습 니다. 1. Array를 사용해서 큐 구현 2. Doubly Linked List를 사용해 큐 구현 3. Two Stack을 사용해서 큐 구현 4. Ring Buffer를 사용해서 큐 구현
  • 5. Concept Array(배열)를 사용한 Queue의 기본 동작 흐름은 아래와 같습니 다. - 특정 크기의 배열을 초기에 설정 - Enqueue(추가) 속도는 O(1) - Dequeue(삭제) 시에는 삭제 이후에 있는 요소들이 한칸 앞으로 이동, 속도는 O(n) - 공간이 꽉차면 2배씩 배열 크기를 늘림, 스위프트의 배열에서는 먼저 크게 늘려놓으니 빈 공간에 추가할 땐 수행속도가 빠름
  • 6. Concept Doubly Linked List를 사용한 Queue의 기본 동작 흐름은 아래와 같습니다. - 링크드 리스트를 활용하여 큐를 구현 - 추가, 삭제 속도가 O(1)으로 빠름 - 삭제 시에 데이터 재정렬 과정이 필요없음
  • 7. Concept Two Stack을 사용한 Queue의 기본 동작 흐름은 아래와 같습니 다. - 두 개의 스택으로 큐를 구현 - Right Stack은 Enqueue, Left Stack은 Dequeue 전용 스택 - 추가(Enqueue) 시에 우측 스택에 추가, 수행 속도는 O(1) - 삭제(Dequeue) 시에 우측 스택의 요소를 거꾸로 정렬 후 좌측 스 택 이동 후 마지막 요소 삭제(popLast), 수행 속도는 O(1)
  • 8. Concept Ring Buffer를 사용한 Queue의 기본 동작 흐름은 아래와 같습니 다. - 고정된 크기의 배열을 사용 - 배열이 큐의 값들로 가득 차면 다시 첫 번째 아이템으로 돌아옴 - 추가는 Write Index, 삭제는 Read Index를 사용 - 큐의 공간이 꽉차면 더이상 추가 불가 - 크기가 고정되 있어서 큐에 들어오는 값의 개수가 예측 불가능할 경우엔 사용할 수 제한
  • 9. Features Queue의 특징을 살펴보면 아래와 같습니다. - 데이터를 한 곳에서는 삽입 한 곳에서는 삭제가 되는 구조 - FIFO(First In First Out) 방식 - 입력된 순서대로 순차적으로 처리 - 운영체제의 작업 스케줄링 등 순차적인 처리 분야에서 활용
  • 10. Implementation Swift를 활용하여 Queue를 구현해보겠습니다. 본 강의에서는 가 장 단순한 구조인 배열을 활용한 큐를 살펴보도록 하겠습니다. 우선 필요한 메소드는 아래와 같습니다. - init : 리스트를 초기화하는 함수 - enqueue : 데이터 입력 - dequeue : 첫번째 데이터 삭제 - peak : 첫번째 데이터 반환 - removeAll : 모든 데이터 삭제 - count : 현재 리스트의 크기를 반환 - capacity : 리스트의 최대 허용 공간 크기를 반환 - isFull : 리스트가 모두 찼는지 체크 - isEmpty : 현재 리스트의 크기가 비어있는지 체크
  • 11. Implementation class Queue<T> { internal var array = Array<T>() public init() {} public func enqueue(_ element: T) { array.append(element) } public func dequeue() -> T? { return array.removeFirst() } public func peek() -> T? { return array.first } public func removeAll() { array.removeAll() } }
  • 12. Implementation extension Queue { public var count: Int { return array.count } public var capacity: Int { get { return array.capacity } set { array.reserveCapacity(newValue) } } public func isFull() -> Bool { return count == array.capacity } public func isEmpty() -> Bool { return array.isEmpty } }
  • 13. Implementation 데이터 반복(Iterator) 제어를 위하여 아래의 프로토콜들을 체택합 니다. public struct QueueIterator<T> : IteratorProtocol { var currentElement: [T] public mutating func next() -> T? { if !self.currentElement.isEmpty { return currentElement.removeFirst() }else { return nil } } } extension Queue : Sequence { public func makeIterator() -> QueueIterator<T> { return QueueIterator(currentElement: self.array) } }
  • 14. Implementation let queue = Queue<Int>() queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) queue.enqueue(4) queue.enqueue(5) // 현재 데이터 카운트 : 5 print(queue.count) // 최대 리스트 크기 : 8 (Swift의 Array는 기본 8개씩 크기를 할당하며 동적으로 2배씩 늘어난다.) print(queue.capacity) print(queue.isFull()) // false for node in queue { print(node) // 1 // 2 // 3 // 4 // 5 }
  • 15. Implementation queue.enqueue(6) queue.enqueue(7) queue.enqueue(8) print(queue.capacity) // 8 print(queue.isFull()) // true queue.dequeue() // 첫 번째 요소 삭제 for node in queue { print(node) // 2 // 3 // 4 // 5 // 6 // 7 // 8 }
  • 16. References [1] [스위프트 : 자료구조] 큐 : Queue : Sequence, Collection 프로토콜 지향 큐 구현하기 : https://the-brain-of- sic2.tistory.com/39 [2] [Swift 자료구조 ch05] Queue : https:// kor45cw.tistory.com/241 [3] [Swift 자료구조 ch06] Circular Queue : https:// kor45cw.tistory.com/242 [4] Swift로 작성해보는 기본 자료구조 - Stack, Queue : https://wlaxhrl.tistory.com/87 [5] 자료구조 - 큐(Queue) with Swift : https:// lazyowl.tistory.com/125
  • 17. References [6] [자료구조] 큐 Queue / 배열을 이용한 큐의 구현 : https:// ppomelo.tistory.com/57 [7] Swift Algorithm Club: Swift Queue Data Structure : https://torpedo87.github.io/algorithm/swift-queue-data- structure.html [8] [Data Structure] 자료구조 - 큐(Queue) : https:// palpit.tistory.com/145 [9] [자료구조]스택과 큐. (stack and queue) : https:// winplz.tistory.com/entry/자료구조스택과-큐-stack-and-queue [10] [Data Structure] 자료구조 - 큐(Queue) : https:// palpit.tistory.com/145