ํ(Queue)๋?
์๋ธ์จ์ด์ ์๋์์น๋ฅผ ์ฌ๋ ค๊ณ ์ฌ๋๋ค์ด ์ค์ ์๊ณ ์๋ค. ์ด๋ ์ด ์ฌ๋๋ค์ด ์์๋ ์ค์ ์์ด๋ก ๋ญ๋ผ ํํํ ๊น? ๋ฐ๋ก ํ(queue) ์ด๋ค.
5๋ช ์ ์ฌ๋์ด ์๋์์น๋ฅผ ์ฌ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ณ ๊ฐ์ ํ ๋, ์๋์์น๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ด ์ ์๋ ์ฌ๋์ ํ(queue) ์ ๋งจ ์ (front) ์ฒซ๋ฒ์งธ ์ฌ๋์ผ ๊ฒ์ด๊ณ , ๋ง์ง๋ง์ผ๋ก ์๋์์น๋ฅผ ๊ตฌ๋งค ํ ์ ์๋ ์ฌ๋์ ๊ฐ์ฅ ๋ฆ๊ฒ ์จ 5๋ฒ์งธ ์ฌ๋์ผ ๊ฒ์ด๋ค. ๋ํ ๊ตฌ๋งค๊ฐ ๋๋ ์ฒซ๋ฒ์งธ ์ฌ๋์ ์๋์์น๋ฅผ ๋ค๊ณ ํ(queue) ๋ฅผ ๋ฒ์ด๋ ๊ฒ์ด๊ณ , ๋ง์ฝ ์๋ก์ด ์ฌ๋์ด ์๋์์น๋ฅผ ๊ตฌ๋งคํ๋ ค ์๋ค๋ฉด ๋ง์ง๋ง ๋ค์ฏ๋ฒ์งธ ์ฌ๋ ๋ค (rear) ์ ์ค์ ์์ผ ํ ๊ฒ์ด๋ค.
Queue ์ญ์ ์ด ๊ฒฝ์ฐ์ ๊ฐ์ ์ ์ ์ ์ถ(First in, First Out)๋ฐฉ์์ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ํ ์ ์๋ค.
ํ์ ํน์ง
์ ์์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ์๋์์น๋ฅผ ๊ตฌ๋งคํ ํ ์ฌ๋๋ค์ด ๋น ์ ธ๋๊ฐ๋ ๊ณณ์ ํ์ ๋งจ ์์ด ๋๊ณ , ์๋ก์ด ์ฌ๋์ด ์ค์ ์๋ ๊ณณ์ ํ์ ๋งจ ๋ค๊ฐ ๋๋ค. ๋ํ ๊ฐ์ฅ ๋ง์ง๋ง์ ์จ ์ฌ๋์ด ํ์ ๋งจ์์ ์ค ์๊ฐ ์๊ณ , ๊ฐ์ฅ ๋์ค์ ์ค์ ์ ์ฌ๋์ด ์์ ์ฌ๋๋ค์ ๋ฌด์ํ๋ฉด์ ๊ตฌ๋งค๋ฅผ ๋จผ์ ํ๊ณ ํ๋ฅผ ๋น ์ ธ ๋๊ฐ ์๋ ์๋ค.
์ด์ฒ๋ผ queue์์๋ ํ์ชฝ ๋์์๋ ์ญ์ ์์ ๋ง ์ด๋ฃจ์ด์ง๋ฉฐ, ๋ค๋ฅธ์ชฝ ๋์์๋ ์ฝ์ ์์ ๋ง์ด ์ด๋ฃจ์ด์ง๋ค. ๋ํ ์์๊ฐ ๋ค์ด์จ ์์๋๋ก ํ๋ฅผ ๋น ์ ธ๋๊ฐ๊ฒ ๋๋ค.
์ด๋ ์ญ์ ์ฐ์ฐ๋ง์ด ์ด๋ฃจ์ด ์ง๋ ๊ณณ์ ํ๋ก ํธ(front: ์ค์ ๋งจ ์)๋ผ๊ณ ํ๋ฉฐ, ์ฝ์ ์ฐ์ฐ๋ง ์ด๋ฃจ์ด์ง๋ ๊ณณ์ ๋ฆฌ์ด(rear: ์ค์ ๋งจ ๋ค)๋ผ๊ณ ํ๋ค. ๋์๊ฐ ํ์ ๋ฆฌ์ด์์ ์ด๋ฃจ์ด์ง๋ ์ฝ์ ์ฐ์ฐ์ ์ธํ(enQueue: ์ฌ๋๋ค์ด ์ค์ ์๋ ๊ฒ), ํ๋ก ํธ์์ ์ด๋ฃจ์ด์ง๋ ์ญ์ ์ฐ์ฐ์ ๋ํ(deQueue: ์ฌ๋๋ค์ด ์ค์ ๋น ์ ธ ๋๊ฐ๋ ๊ฒ)๋ผ๊ณ ํ๋ค.
Swift์์ ํ ๊ตฌํํ๊ธฐ (Array ๊ธฐ๋ฐ)
struct CalculatorItemQueue<T> {
private var queue: [T] = []
// ์ฌ๋๋ค์ด ์ ์๋ ์ค์ ๋งํจ
mutating func enqueue(data: T) {
list.append(data)
}
// ์๋์์น๋ฅผ ์ฌ๋ฌ ์จ ์ฌ๋์ด ๋งจ ๋ค์ ์ค์ ์๋ ๊ฒ
mutating func dequeue() -> T? {
list.removeFirst()
}
// ์๋์์น๋ฅผ ๊ตฌ๋งค ์๋ฃํ ๋งจ ์์ ์ฌ๋์ ์ค์ ๋ ๋๋ ๊ฒ
mutating func removeAll() {
list.removeAll()
}
// ๊ตฌํ ํ์ ์กฐ๊ฑด ์๋
}
'๐ฅ CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] LinkedList (0) | 2022.05.17 |
---|