자료구조
Queue
motosw3600
2021. 12. 29. 01:22
Queue
- FIFO(First In First Out)형식의 자료구조
- enqueue(데이터 추가)와 dequeue(데이터 추출)를 사용해 구현
- swift의 reversed(시간복잡도 O(1))를 사용하여 구현
구현 코드
struct Queue<T> {
var enqueue: [T]
var dequeue: [T] = []
var count: Int {
return self.enqueue.count + self.dequeue.count
}
var isEmpty: Bool {
return self.enqueue.isEmpty && self.dequeue.isEmpty
}
var first: T? {
if self.dequeue.isEmpty {
return self.enqueue.first
} else {
return self.dequeue.last
}
}
var last: T? {
if self.dequeue.isEmpty {
return self.enqueue.last
} else {
return self.dequeue.first
}
}
init(_ queue: [T]) {
self.enqueue = queue
}
mutating func push(_ data: T) {
self.enqueue.append(data)
}
mutating func pop() -> T? {
if self.dequeue.isEmpty {
self.dequeue = self.enqueue.reversed()
self.enqueue.removeAll()
}
return self.dequeue.popLast()
}
mutating func removeAll() {
self.enqueue.removeAll()
self.dequeue.removeAll()
}
}
var queue = Queue([1])
queue.push(2)
queue.push(3)
print(queue.last) // Optional(3)
print(queue.pop()) // Optional(1)
print(queue.first) // Optional(2)