CS

[์ž๋ฃŒ๊ตฌ์กฐ] ํ (Queue)

moaoh 2024. 10. 30. 16:56

ํ (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๋ฐฉ์‹์ด ์‚ฌ์šฉ๋˜์–ด ์ธํ„ฐํŽ˜์ด์Šค ์ œํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.