[C++]์ํํ ๊ตฌํ, ์ค์๊ธฐ ์์
ํ๋ ๊ฐ์ฅ ๋จผ์ ์ ๋ ฅํ ์๋ฃ๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ถ๋ ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
์ ๋ฅ์ฅ์์, ์ฌ๋๋ค์ด ์ค์ง์ด ์์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ
๋ฒ์ค๊ฐ ์ค๋ฉด ์์๋๋ก ํ๋ ์์๋ฒ์ ์ ์๊ฐํ๋ฉด ๋๋ค.
ํ๋ฅผ ๊ตฌํํ๋ ๊ธฐ๋ณธ idea๋
๋ฐฐ์ด ๋ด head(์ฒ์ ์ ์ฌ๋)์ tail(๋ง์ง๋ง์ ์ ์ฌ๋) ์ธ๋ฑ์ค์ ์ก๊ณ
enqueue(์ค์ด ๊ธธ์ด์ง๋ ์ํ) ํ ๋๋ง๋ค tail++;
dequeue(์์ฌ๋๋ถํฐ ๋ฒ์ค์ ํ์ ์ค์ด ์งง์์ง๋ ์ํ) ํ ๋๋ง๋ค head++;์ ํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ฐฐ์ด์ ์์ฃผ ํฌ๊ฒ ์ก์ง ์๋ ๊ฒฝ์ฐ, ํ์ ๋ฐฐ์ด ํฌ๊ธฐ ๋ง์ง๋ง๊น์ง head๊ฐ ๋๋ฌํ์ฌ
์์ชฝ์ ๋น ๋ฐฐ์ด(head๊ฐ ๊ฑฐ์ณ์ง๋๊ฐ)๋ค์ ์ฌํ์ฉํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ๋ญ๋น๊ฐ ์ฌํ ํธ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ํํ๋ฅผ ์ด๋ค๋ฉด ์ ํ ํ์ ๋นํ์ฌ
๋์ผํ ๋ฐฐ์ด์ด์ง๋ง ๊พธ์คํ๊ฒ head๊ฐ ๊ฑฐ์ณ์ง๋๊ฐ ์ธ๋ฑ์ค๋ค์ ์ฌํ์ฉํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ํ์ฉ ์ธก๋ฉด์์ ๋ ์ข๋ค.
์ํํ์ idea๋ ์ ํํ์ ์ฒ์๊ณผ ๋์ด ์ด์ด์ ธ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ํ ์ค์ด์๋ ํ๊ฐ ๊ฐ๊ฐ์ ๋๋ฅผ ํ๋ฏ ์์ ์ด๋ฃจ๊ฒ ๋๋ค.
enqueue๋ฅผ ํ๋ dequeue๋ฅผ ํ๋
์ก์๋์ ๋ฐฐ์ด ํฌ๊ธฐ, ์์ ์ ์ ์์์ ์ธ๋ฑ์ค๋ฅผ ์ฎ๊ธฐ๋ฉด์ ๊ณ์ ๋น๊ธ๋น๊ธ ๋์๊ฐ๊ฒ๋ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
enqueue๋ฅผ ํ ๋ tail++;๋์ ์ tail = (tail + 1) % Queue_capacity;
dequeue๋ฅผ ํ ๋ head++;๋์ ์ head = (head + 1) % Queue_capacity;
๋ก์ง์ ์ฐ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
#include <iostream>
using namespace std;
#define Queue_capacity 10
int queueLine[Queue_capacity];
int head = 0;
int tail = -1;
int queue_size = 0;
void enqueue(int n)
{
if (queue_size == Queue_capacity)
{
cout << "Queue_full" << '\n';
return;
}
tail = (tail + 1) % Queue_capacity;
queue_size++;
queueLine[tail] = n;
}
int dequeue()
{
int r;
if (queue_size == 0)
{
cout << "Queue_empty" << '\n';
return 0;
}
r = queueLine[head];
head = (head + 1) % Queue_capacity;
queue_size--;
return r;
}
int main() {
int number, r;
do {
cout << "input number: ";
cin >> number;
if (number > 0)enqueue(number);
else if (number == 0)
{
r = dequeue();
cout << r;
}
} while (number >= 0);
return 0;
}