Circular Queue 원형큐(환형큐) 질문드립니다
글쓴이: msi0124 / 작성시간: 월, 2017/06/12 - 2:11오후
구현한 큐를 버퍼로 이용하여 Uart 통신에서 Receive data를
큐에 데이터 삽입 및 출력용도로 사용하려합니다.
코드는 visual상에서 블로그 참고하여 구조체 형식으로 생성한 형태입니다
통신쪽에 Receive data(받는쪽) 데이터 프로토타입은 char 형태인데,
구조체로 생성한 Queue에 매게변수 형식을 바꿔보려해도 구조체 배열형식을
어떻게 처리해야할지 감이안옵니다 ㅠ.ㅠ
// *********** CircularQ.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include "CircularQ.h" CircularQueue *QIsInit() { CircularQueue *queue=(CircularQueue *)malloc(sizeof(CircularQueue)); queue->front=0; queue->rear=0; queue->length=0; return queue; } void Q_IsFree(CircularQueue *queue) { free(queue); } BOOL Q_IsFull(CircularQueue *queue) { if(queue->front == (queue->rear+1) % MAX_QUEUE_SIZE) { return TRUE; } else { return FALSE; } } void Enqueue(CircularQueue *queue) { if(Q_IsFull(queue)==FALSE) { printf("input you data => "); (queue->rear)=(queue->rear+1)%MAX_QUEUE_SIZE; gets(queue->CQ[queue->rear]); printf(" Enqueue String data : \"%s\" \n",queue->CQ[queue->rear]); (queue->length)++; printf("\n"); } else { printf("Circular Queue is Full \n"); } } BOOL Q_IsEmpty(CircularQueue *queue) { if(queue->front == queue->rear) {return TRUE; } else {return FALSE; } } void Dequeue(CircularQueue *queue ,char *data) { if(Q_IsEmpty(queue)==FALSE) { (queue->front)=(queue->front+1)%MAX_QUEUE_SIZE; strcpy(data,queue->CQ[queue->front]); (queue->length)--; printf("Dequeue Data : \" %s \" \n",data); } else { printf("Circular Queue is Empty !\n"); } } int Q_IsLength(CircularQueue *queue) { return queue->length; } ************************************************************************************* // ******************* CircularQ.h #define _CRT_SECURE_NO_WARNINGS #define MAX_QUEUE_SIZE 6 //큐 사이즈 #define MAX_STRING_SIZE 100 // 큐 Str 길이 #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> typedef enum{FALSE,TRUE} BOOL ; typedef struct { char CQ[MAX_QUEUE_SIZE][MAX_STRING_SIZE]; int front; int rear; int length; char *data[MAX_QUEUE_SIZE][MAX_STRING_SIZE]; } CircularQueue ; CircularQueue* QIsInit(); void Q_IsFree(CircularQueue *queue); int Q_IsLength(CircularQueue *queue); void Enqueue(CircularQueue *queue); void Dequeue(CircularQueue *queue ,char *data); BOOL Q_IsEmpty(CircularQueue *queue); BOOL Q_IsFull(CircularQueue *queue); <\code>
Forums:
질문이 아니라 선언이로군요.
질문이 아니라 선언이로군요.
뭔지는 모르겠지만 감이 오지 않는다니 안타깝네요.
대체 뭘 하려고 하시는지 확실해지면 그 때 다시 제작의뢰든 질문이든 하시길 바랍니다.
질문을한겁니다 선언이아닙니다
질문을한겁니다 선언이아닙니다
참고해보세요.
정적 배열의 큐'를 사용하는 예제 입니다.
rear 는 마지막에 1개씩 뒤에 추가 하는거고.
front 는 앞에 있는거 1개씩 빼는 겁니다. (큐에서 다음 순서의 위치로 이동합니다.)
각 데이터의 초기화는 별도로 확인해봐야 합니다.
구조체 안에 있는.
배열은 2중 배열로.
배열의 첫번째는 rear (마지막)와 front (맨앞) 순서 번호'이고.
배열의 두번째는 입력받은 값입니다.
http://codepad.org/QdiC05b4
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기