**
작성자가 stack / queue를 연습하면서 작성한 기록을 남긴내용입니다.
나중에 자세한 설명가 추가 내용을 작성하며 수정할 예정입니다.
**
Stack
- LIFO, array로 구현
- 다양한 자료형을 수용할 수 있도록 generic을 이용
- push, pop 메서드의 경우 구조체 내부에서 데이터를 수정하기 때문에 mutating 키워드를 사용.
struct Stack<T> {
var stack = [T]()
var isEmpty: Bool {
return self.stack.isEmpty
}
var top: T? {
return self.stack.last
}
mutating func push(_ item: T) {
self.stack.append(item)
}
mutating func pop() -> T? {
guard self.isEmpty == false else { return nil }
return self.stack.popLast()
}
}
Queue
- FIFO, array를 이용하여 구현
- 스택과 동일하게 다양한 자료형을 수용할 수 있도록 generic을 이용하여 정의.
- enqueue, dequeue 메서드의 경우 구조체 내부에서 데이터를 수정해야 하기 때문에 mutating 키워드를 통해 정의.
// 구현 1
struct Queue<T> {
var queue = [T]()
var isEmpty: Bool {
return self.queue.isEmpty
}
var front: T? {
return self.queue.first
}
var rear: T? {
return self.queue.last
}
mutating func enqueue(_ item: T) {
self.queue.append(item)
}
mutating func dequeue() -> T? {
guard self.isEmpty == false else { return nil }
return self.queue.removeFirst()
}
}
// 구현 2
struct Queue2 {
var queue: [Int?] = []
var head: Int = 0
var count: Int {
return queue.count
}
var isEmpty: Bool {
return queue.isEmpty
}
mutating func enqueue(_ element: Int) {
queue.append(element)
}
mutating func dequeue() -> Int? {
guard head <= queue.count, let element = queue[head] else { return nil }
queue[head] = nil
head += 1
if head > 50 {
queue.removeFirst(head)
head = 0
}
return element
}
}
반응형
'알고리즘 & 자료구조' 카테고리의 다른 글
BFS/DFS 간단 예제 - Swift (0) | 2022.02.26 |
---|---|
[자료구조] Trie - Swift (0) | 2022.02.25 |
Bubble Sort 간단 예제 - swift (0) | 2021.07.16 |