πŸ“š Queue

Queue


πŸ“š 큐(Queue)λž€?

  • FIFO(First In First Out) ꡬ쑰λ₯Ό λ”°λ₯΄λŠ” μ»¨ν…Œμ΄λ„ˆ μ–΄λŽν„°μ΄λ‹€.
  • 즉, λ¨Όμ € λ“€μ–΄κ°„ 것이 κ°€μž₯ λ¨Όμ € λ‚˜κ°€λŠ” ꡬ쑰
  • 맨 μ•ž(Front)μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  맨 λ’€(back)에 μš”μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 방식

큐


πŸ’‘ μ£Όμš” 멀버 ν•¨μˆ˜

ν•¨μˆ˜ μ„€λͺ…
push() 큐의 뒀에 μš”μ†Œ μ‚½μž…
pop() 큐의 μ•ž μš”μ†Œ 제거
front() 큐의 맨 μ•ž μš”μ†Œ λ°˜ν™˜
back() 큐의 맨 λ’€ μš”μ†Œ λ°˜ν™˜
empty() 큐가 λΉ„μ—ˆλŠ”μ§€ μ—¬λΆ€ λ°˜ν™˜
size() 큐에 μžˆλŠ” μš”μ†Œμ˜ 개수 λ°˜ν™˜

πŸ’» 큐 κ΅¬ν˜„ 예제

#include <iostream>
#include <queue>

int main() {
    std::queue<std::string> q;

    // μš”μ†Œ μ‚½μž…
    q.push("Hello"); //μ‚½μž…
    q.push("World"); 
    q.push("!");

    std::cout << "Queue size: " << q.size() << '\n'; //크기 확인
    std::cout << "Front: " << q.front() << '\n'; //큐의 맨 μ•ž μš”μ†Œ 확인(κ°’λ§Œ ν™•μΈν•˜μ§€ μ‚­μ œλŠ” ν•˜μ§€μ•ŠμŒ)
    std::cout << "Back: " << q.back() << '\n'; //큐의 맨 λ’€ μš”μ†Œ 확인

    // λͺ¨λ“  μš”μ†Œ 제거
    while (!q.empty()) {
        std::cout << "Popping: " << q.front() << '\n';
        q.pop();
    }

    return 0;
}


πŸ“š 큐의 λ‚΄λΆ€ κ΅¬ν˜„

  • queueλŠ” μ‹€μ œ λ‚΄λΆ€μ μœΌλ‘œ deque(κΈ°λ³Έ) λ˜λŠ” list와 같은 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.
std::queue<int, std::deque<int>> dequeQueue;
std::queue<int, std::list<int>> listQueue;

πŸ’‘ 큐 μ‚¬μš©μ‹œ μ£Όμ˜μ‚¬ν•­

  • queue.pop()의 λ°˜ν™˜ 값은 μ—†λ‹€. μš”μ†Œλ₯Ό μ œκ±°ν•˜κΈ° μ „ front() λ‚˜ back()으둜 κ°’ 확인은 ν•„μˆ˜μ΄λ‹€.
  • queueλŠ” 순차적인 μ‚½μž…/μ‚­μ œμ— μ΅œμ ν™” λ˜μ–΄μžˆμ–΄ λ¬΄μž‘μœ„ 접근은 λΉ„νš¨μœ¨μ μ΄λ‹€.

πŸ“Œ 첨삭 : queue와 deque의 차이점

  • 곡톡점
    1. λ‘˜ λ‹€ μ„ ν˜• 데이터 ꡬ쑰둜 μš”μ†Œλ₯Ό μ‚½μž…/μ‚­μ œν•˜λŠ” 방식에 μ΅œμ ν™”λ˜μ–΄μžˆμŒ
    2. FIFO λ°©μ‹μœΌλ‘œ 데이터λ₯Ό 관리가λŠ₯
  • 차이점
ꡬ뢄 queue deque
내뢀ꡬ쑰 dequeλ₯Ό κΈ°λ³Έ μ»¨ν…Œμ΄λ„ˆλ‘œ μ‚¬μš© 자체적으둜 더블 μ—”λ””λ“œ 큐 κ΅¬ν˜„
μ‚½μž…/μ‚­μ œ μ•žμ—μ„œ μ‚­μ œμ™€ λ’€μ—μ„œ μ‚½μž…λ§Œ κ°€λŠ₯ μ•žκ³Ό λ’€μ—μ„œ μ‚½μž…/μ‚­μ œ κ°€λŠ₯
멀버 ν•¨μˆ˜ μ œν•œλœ ν•¨μˆ˜(push(), pop(), front(), back()) 더 λ‹€μ–‘ν•œ ν•¨μˆ˜(push_front(), push_back(), pop_front(), pop_back())
λ©”λͺ¨λ¦¬κ΅¬μ‘° λ‹¨μˆœ FIFO에 μ΅œμ ν™” λ©”λͺ¨λ¦¬ λΈ”λ‘κΈ°λ°˜μœΌλ‘œ ν™•μž₯
μ‚¬μš© λͺ©μ  순차적 μž‘μ—…(큐) μ–‘λ°©ν–₯ μ‚½μž…/μ‚­μ œκ°€ ν•„μš”ν•œ 상황