ํ์ ์ถ์์๋ฃํ
void QueueInit(Queue *pq)
- ํ์ ์ด๊ธฐํ๋ฅผ ์งํํ๋ค.
- ํ ์์ฑํ ์ ์ผ ๋จผ์ ํธ์ถ ๋์ด์ผ ํ๋ ํจ์์ด๋ค.
int QIsEmpty(Queue *pq)
- ํ๊ฐ ๋น ๊ฒฝ์ฐ 1, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 0์ ๋ฐํํ๋ค.
void Enqueue(Queue *pq, Data data)
- ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋งค๊ฐ๋ณ์ data๋ก ์ ๋ฌ๋ ๊ฐ์ ์ ์ฅํ๋ค.
Data Dequeue(Queue *pq)
- ์ ์ฅ์์๊ฐ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
- ์ญ์ ๋ ๋ฐ์ดํฐ๋ ๋ฐํ๋๋ค.
- ๋ณธ ํจ์์ ํธ์ถ์ ์ํด์๋ ๋ฐ์ดํฐ๊ฐ ํ๋ ์ด์ ์กด์ฌํจ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค.
Data QPeek(Queue *pq)
- ์ ์ฅ์์๊ฐ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ์ญ์ ํ์ง ์๋๋ค.
- ๋ณธ ํจ์์ ํธ์ถ์ ์ํด์๋ ๋ฐ์ดํฐ๊ฐ ํ๋ ์ด์ ์กด์ฌํจ์ด ๋ณด์ฅ๋์ด์ผํ๋ค.
ํ๋ ์ ์ ์ ์ถ, ๋จผ์ ๋ฃ์ ์๋ฃ๊ฐ ๋จผ์ ๋์ค๋ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์๋ฅผ ๋ค์ด ๋ง์ง์ ์ค์ ์๊ฐํ ์ ์๋ค. ๋จผ์ ์ค์ ์ ์ฌ๋์ด ๊ฐ์ฅ ๋จผ์ ์์์ ๋จน์ ์ ์๋ค. ํ์ค์์ ์ํํ๋ ๋ฐฐ์ด์ ์ฌ์ฉ ํด์ ๊ตฌํ ํ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์๊ฐํด ๋ณผ ์ ์๋ค.
์ํ์ ํต์ data๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ ์ด์ ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์์ ๋, ์์์ ๋ฃ๊ณ ๋ค์์ ๋นผ๊ธฐ๋๋ฌธ์ ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ์ง ์์๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ๊ณ ์ ์ด๋ฐ์์ผ๋ก ๊ตฌ์ฑํ๋ค.
typedef struct _cQueue
{
int front;
int rear;
Data queArr[QUE_LEN];
} cQueue;
์์์ front์ rear๋ ๋ณ์ ๋ช ์์ ์์ ์๋ฏ์ด ๋ฐฐ์ด์ ๋จธ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๊ฐ๋ฅดํจ๋ค. ํ์ ๊ฒฝ์ฐ ๋ค์์ ๋นผ๊ธฐ ๋๋ฌธ์ rear๋ณ์๋ฅผ ํตํด์ ์ญ์ ํ๊ณ , ์์์ ๋ถํฐ ๊ฐ์ ๋ฃ๊ธฐ ๋๋ฌธ์ front๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ์ฝ์ ํ๋ค.
๊ฐ์ด ๊ฝ์ฐจ๋ฉด rear + 1 = front๊ฐ ๋๋ค. ๋ง์ฝ ๊ฐ์ ์ ๋ถ ์ญ์ ํด ๋น์ด์๋ค๋ฉด?.
rear + 1 = front๊ฐ ๋๋ค.
์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ค ํ๋๋ ๋ฐฐ์ด์ค ํ๋๋ฅผ ๋น์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด๋ค.
๋น์์ ธ ์์ ๊ฒฝ์ฐ rear == front, ๊ฐ๋ ์ฐจ์์ ๊ฒฝ์ฐ rear + 1 = front๊ฐ ๋๋ค. ์ด๋ฌํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์ํํ๋ฅผ ๊ตฌํํ๋ค.
void EnQueue(Queue *pq, Data data)
{
if (NextPosIdx(pq->rear) == pq->front)
exit(1);
pq->rear = NextPosIdx(pq->rear);
pq->queArr[pq->rear] = data;
}
Data DeQueue(Queue *pq)
{
if (QIsEmpty(pq))
exit(1);
pq->front = NextPosIdx(pq->front);
Data dData = pq->queArr[pq->front];
return dData;
}
NextPosIdx()์ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋์์ ๊ฒฝ์ฐ 0์, ์๋๋ฉด ๋ค์ ์์น๋ฅผ ๋ฐํํ๋ค.
์ํ ํ ์ฝ๋: https://boiling-fowl-6d6.notion.site/CircularQueue-5e8b296f563e44088dd9d27376fadc87
๋ ธ๋ ๊ธฐ๋ฐ ํ ์ฝ๋: https://boiling-fowl-6d6.notion.site/Queue-5c05c1cd15bf4815ae6de230640d3980
'์๋ฃ ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ ๊ฐ๋ (0) | 2023.02.28 |
---|---|
ํธ๋ฆฌ ๊ฐ๋ ๋ฐ ๊ตฌํ (0) | 2023.02.28 |
์คํ ๊ฐ๋ (0) | 2023.02.28 |
์๋ฃ ๊ตฌ์กฐ ์ด ์ ๋ฆฌ (0) | 2023.02.28 |
์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ฐ๋ (0) | 2023.02.28 |