ํ (Queue) ๋?
- ํ๋ FIFO(First In, First Out) ๊ตฌ์กฐ๋ก, ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ์๋ฃ๊ตฌ์กฐ
- ์คํ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋จผ์ ๋ค์ด์จ๊ฒ์ด ๋จผ์ ๋๊ฐ๋ FIFO ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

์ฅ๋จ์
์ฅ์
- ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ O(1) ์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๊ฐ ๋๋ค.
๋จ์
- ์ค๊ฐ๊ณผ ๋ง์ง๋ง์ ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ๋นํจ์จ์ ์ด๋ค.
๊ตฌํ
#include <queue> ์ฌ์ฉ
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
cout << q.front() << "\n"; // output : 1
q.pop();
cout << q.front() << "\n"; // output : 2
if (!q.empty()) {
cout << "not empty" << "\n"; // output : not empty
}
if (q.size()) {
cout << "size : " << q.size() << "\n"; // output : size : 2
}
return (0);
}
deque๋ฅผ ํ์ฉํ ๊ตฌํ
#ifndef CUSTOMQUEUE_HPP_
#define CUSTOMQUEUE_HPP_
#include <iostream>
#include <deque>
template <typename T>
class CustomQueue
{
private:
std::deque<T> c;
int _size;
public:
CustomQueue() {};
~CustomQueue() {};
void push(T data) {
c.push_back(data);
}
T pop() {
T temp = c.front();
c.pop_front();
return temp;
}
size_t size() const {
return c.size();
}
bool empty() const {
return c.empty();
}
T front() const {
return c.front();
}
};
#endif
- queue์ ๊ฒฝ์ฐ์๋ stack๊ณผ ๋ค๋ฅด๊ฒ FIFO๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ๋๋ฌธ์ list๋ deque๊ฐ์ ๋์ ํ ๋น๋ฐฉ์์ ์ฌ์ฉํ์ง์์ผ๋ฉด ๋ฐฐ์ด์ ์ฌ์ฌ์ฉ์ด ์ด๋ฃจ์ด์ง์ง์๊ธฐ๋๋ฌธ์ ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง๊ธฐ๋๋ฌธ์ deque ๋ฐฉ์ ์ฌ์ฉ
- stack๊ณผ queue์ ์ค์ ๊ตฌํ์์๋ deque๋ฐฉ์์ด ์ฌ์ฉ๋์ด ์ธํฐํ์ด์ค ์ ํ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋์ด์๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (Tree) (0) | 2024.11.07 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋งํฌ๋๋ฆฌ์คํธ (Linked list) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2024.10.29 |
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด (Array) (0) | 2024.10.29 |
[์๋ฃ๊ตฌ์กฐ] ์๋ฃ๊ตฌ์กฐ (data structure) (0) | 2024.10.29 |
ํ (Queue) ๋?
- ํ๋ FIFO(First In, First Out) ๊ตฌ์กฐ๋ก, ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ์๋ฃ๊ตฌ์กฐ
- ์คํ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋จผ์ ๋ค์ด์จ๊ฒ์ด ๋จผ์ ๋๊ฐ๋ FIFO ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

์ฅ๋จ์
์ฅ์
- ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ O(1) ์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๊ฐ ๋๋ค.
๋จ์
- ์ค๊ฐ๊ณผ ๋ง์ง๋ง์ ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ๋นํจ์จ์ ์ด๋ค.
๊ตฌํ
#include <queue> ์ฌ์ฉ
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
cout << q.front() << "\n"; // output : 1
q.pop();
cout << q.front() << "\n"; // output : 2
if (!q.empty()) {
cout << "not empty" << "\n"; // output : not empty
}
if (q.size()) {
cout << "size : " << q.size() << "\n"; // output : size : 2
}
return (0);
}
deque๋ฅผ ํ์ฉํ ๊ตฌํ
#ifndef CUSTOMQUEUE_HPP_
#define CUSTOMQUEUE_HPP_
#include <iostream>
#include <deque>
template <typename T>
class CustomQueue
{
private:
std::deque<T> c;
int _size;
public:
CustomQueue() {};
~CustomQueue() {};
void push(T data) {
c.push_back(data);
}
T pop() {
T temp = c.front();
c.pop_front();
return temp;
}
size_t size() const {
return c.size();
}
bool empty() const {
return c.empty();
}
T front() const {
return c.front();
}
};
#endif
- queue์ ๊ฒฝ์ฐ์๋ stack๊ณผ ๋ค๋ฅด๊ฒ FIFO๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ๋๋ฌธ์ list๋ deque๊ฐ์ ๋์ ํ ๋น๋ฐฉ์์ ์ฌ์ฉํ์ง์์ผ๋ฉด ๋ฐฐ์ด์ ์ฌ์ฌ์ฉ์ด ์ด๋ฃจ์ด์ง์ง์๊ธฐ๋๋ฌธ์ ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง๊ธฐ๋๋ฌธ์ deque ๋ฐฉ์ ์ฌ์ฉ
- stack๊ณผ queue์ ์ค์ ๊ตฌํ์์๋ deque๋ฐฉ์์ด ์ฌ์ฉ๋์ด ์ธํฐํ์ด์ค ์ ํ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋์ด์๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (Tree) (0) | 2024.11.07 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋งํฌ๋๋ฆฌ์คํธ (Linked list) (0) | 2024.10.30 |
[์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2024.10.29 |
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด (Array) (0) | 2024.10.29 |
[์๋ฃ๊ตฌ์กฐ] ์๋ฃ๊ตฌ์กฐ (data structure) (0) | 2024.10.29 |