Queue를 배열로 구현 해보자.
이전 RTOS Study에서 Queue를 구현 해 보고 공부 해 본적 있으니 설명은 링크 참고
책 내용을 보니 링크에서 공부 한 내용과 크게 다르지 않았다.
Queue.c
/*
* Queue.c
*
* Created on: 2020. 11. 22.
* Author: Jitae
*/
#include "Queue.h"
#include "string.h"
#include "stdio.h"
void Queue_Init(Queue *lqueue)
{
memset(lqueue->Buf, 0, QUEUE_SIZE);
lqueue->Front_ptr = 0;
lqueue->Rear_ptr = 0;
}
int Qptr_increase(int tmp)
{
if (tmp + 1 == QUEUE_SIZE)
{
return 0;
}
else
{
return ++tmp;
}
}
void EnQueue(Queue *lqueue, int data)
{
if (Qptr_increase(lqueue->Rear_ptr) == lqueue->Front_ptr)
{
printf("QUEUE Buf is FULL \r\n");
return;
}
else
{
lqueue->Rear_ptr = Qptr_increase(lqueue->Rear_ptr);
lqueue->Buf[lqueue->Rear_ptr] = data;
}
}
int Dequeue(Queue *lqueue)
{
if (lqueue->Front_ptr == lqueue->Rear_ptr)
{
printf("QUEUE Buf is EMPTY \r\n");
return -1;
}
else
{
lqueue->Front_ptr = Qptr_increase(lqueue->Front_ptr);
return lqueue->Buf[lqueue->Front_ptr];
}
return 0;
}
RTOS에서 사용한 코드와 만들어진 코드를 비교했을 때 큰 틀에서는 차이가 없지만 Queue Pointer가 마지막 index를 가리킬 때 함수로 처리해서 0으로 갔느냐 아니면 %를 사용해서 0으로 갔느냐 차이가 있다
그 외엔 큰 차이는 없다.
main을 다음과 같이 작성하여 Queue 동작을 검증 하였다.
/*
* main.c
*
* Created on: 2020. 11. 22.
* Author: Jitae
*/
#include "stdio.h"
#include "stdint.h"
#include "Queue.h"
Queue KQueue;
int main(void)
{
Queue_Init(&KQueue);
printf("Data is %d \r\n", Dequeue(&KQueue));
for(int i = 0; i < QUEUE_SIZE; i++)
EnQueue(&KQueue, i);
for(int i = 0; i < QUEUE_SIZE; i++)
printf("Data is %d \r\n", Dequeue(&KQueue));
printf("Data is %d \r\n", Dequeue(&KQueue));
printf("Data is %d \r\n", Dequeue(&KQueue));
}
'자료구조' 카테고리의 다른 글
이진트리 구현 (0) | 2020.12.30 |
---|---|
Queue - LinkedList로 구현 (0) | 2020.11.24 |
Stack - 후위표기법 -1(계산) (0) | 2020.11.16 |
Stack - 후위표기법 -1(변환) (0) | 2020.11.12 |
Stack - 중위표기법 (괄호 x) (0) | 2020.11.10 |