[Data Structures] Queue - Doubly Linked List based Implementation
Queue
์๋ฒ์๋ Doubly Linked List๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ ์ฝ๋๋ฅผ ์ดํด๋ณธ๋ค. Doubly Linked List ์ฝ๋๋ ์ฐธ๊ณ ๋งํฌ ๋ฅผ ํ์ธํ๋ค.
Doubly Linked List๋ก Queue ๊ตฌํํด๋ณด๊ธฐ
class QueueLinkedList<T>: Queue {
private var linkedList = DoublyLinkedList<T>()
var isEmpty: Bool {
linkedList.isEmpty
}
var peek: T? {
linkedList.first?.value
}
init() {}
func enqueue(_ element: T) -> Bool {
linkedList.append(element)
return true
}
func dequeue() -> T? {
guard !linkedList.isEmpty, let element = linkedList.first else {
return nil
}
return linkedList.remove(element)
}
}
์ ํฌ์คํ ์์ ๋ง๋ค์ด๋ Queue ํ๋กํ ์ฝ์ ์ฑํํ ๋ค ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๊ตฌํํ๋ค. Doubly Linked List๊ฐ ์์๋ค๋ฉด ๊ตฌํํ ์ ์์โฆ
์คํ ๊ฒฐ๊ณผ ๋ฐ ๋ณต์ก๋ ์ ๋ฆฌ
- ์คํ ๊ฒฐ๊ณผ
- ๋ณต์ก๋
QueueArray๋ ํ์์ element๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ ธ์์ง๋ง ๋งํฌ๋๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ค๋ฉด O(1)๋ก ์ค์ผ ์ ์๋ค. (๋ฐฐ์ด์ ์์ผ๋ก ํ์นธ์ ๋ก๊ฒจ์ผ๋์ง๋ง ๋งํฌ๋๋ฆฌ์คํธ๋ ๋ ธ๋๋ง ํด์ ํ๋ฉด ๋๋๊น.)
ํ์ง๋ง ๋งํฌ๋๋ฆฌ์คํธ๋ ์ธ์คํด์ค ๋ด๋ถ์์ prev์ next๋ฅผ ์ฐธ์กฐํด์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋์ ํธ์ด๋ค. ๊ฑฐ๊ธฐ์ element๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฏ๋ก Array์ ๋นํด ๋น์ฉ์ด ๋ง์ด ๋๋ ๋์ ํ ๋น์ด ํ์ํ๋ค.
์๋๋ ์ด๊ฒ๋๋ฌธ์ ๋ง๋ฒํผ๋ฅผ ์ดํด๋ด์ผ ํ์ง๋งโฆ ๋ฐ์๋ฏ๋ก ๊ทธ๋ฅ ๋ฐ๋ก ์คํ ๋๊ฐ๋ก ๊ตฌํํ๋ ๊ฑธ ์์๋ณด๋ฌ ๊ฐ๋ค.
Leave a comment