본문 바로가기

자료구조

Queue - 배열 구현

Queue를 배열로 구현 해보자.

 

이전 RTOS Study에서 Queue를 구현 해 보고 공부 해 본적 있으니 설명은 링크 참고

kjt9109.tistory.com/entry/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-OS-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-15%EB%A9%94%EC%84%B8%EC%A7%95

 

임베디드 OS 개발 프로젝트 15(메시징)

http://www.yes24.com/Product/Goods/84909414. ├── boot │   ├── Entry.S │   ├── Handler.c │   ├── Main.c │   └── main.h ├── hal │   ├── HalInterrupt.h..

kjt9109.tistory.com

 

책 내용을 보니 링크에서 공부 한 내용과 크게 다르지 않았다.

 

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