저번 방학때 인턴 실습을 했었는데, 이번에 면접 준비한다고 다시 프로그램을 짜는중입니다..
그런데 벌써 다 까먹어버렸네요 ㅠㅠ
일단 기본 개념은 이렇습니다.
1. 배열 형태의 원형큐 생성
2. 자료를 계속 넣는데(24시간의 자료를 1시간씩 넣음) 만약 큐가 꽉차면 가장 오래된 자료는 삭제하고 그부분에 가장 최근자료 넣음
-> 이때 1시간의 자료들은 여러개기때문에 memcpy를 통해 복사.
3. 가장 최근자료부터 출력.
일단 지금은 테스트를 위해서 난수를 각 배열에 넣어 출력확인해보려고하는데요..
이상하게 제대로 작동안되네요... 출력부분만 봐주시면 감사하겠습니다 (__)
--------------------------------------------------------------------------
#include<stdio.h>
#include<time.h>
#include<Windows.h>
#include<stdlib.h>
#define DATA_SIZE 24
#define MAX_H 25
typedef struct _element{
unsigned int array[DATA_SIZE];
} element;
typedef struct {
int front_h;
int rear_h;
int count_h;
element Queue_H[MAX_H];
} Queue;
void init(Queue *q);
void addqueue_h(Queue *q, element *data);
void print_h(Queue *q);
void copyarr(element *dest,element *source);
int main()
{
int number;
int outnum;
int random;
element temp;
Queue qh;
init(&qh);
srand((unsigned)time(NULL));
for(outnum=0;outnum<MAX_H;outnum++)
{
for(number=0;number<DATA_SIZE;number++)
{
random = rand(); // 난수생성
temp.array[number]=random%10; // 임시배열에 난수 넣기
}
addqueue_h(&qh,&temp); // temp를 큐에 넣기
print_h(&qh); // 큐 출력
printf("\n");
}
}
void init(Queue *q) // 큐 초기화
{
memset(q->Queue_H,0,sizeof(element)* MAX_H);
q->front_h=1;
q->rear_h=0;
q->count_h=0;
}
void addqueue_h(Queue *q, element *data) // 데이터 추가
{
if(q->count_h == MAX_H)
{
q->front_h=(q->front_h+1)%MAX_H;
copyarr(&q->Queue_H[q->rear_h],data);
q->rear_h=(q->rear_h+1)%MAX_H;
}
else
{
copyarr(&q->Queue_H[q->rear_h],data);
q->rear_h++;
q->count_h++;
}
}
void print_h(Queue *q) // 큐 출력 ->>>>>>>>>>> 이 부분을 어떻게 고쳐야 될까요?
{
int i;
for(i=q->front_h;i<q->rear_h;i++);
printf("%d ",q->Queue_H[i]);
}
void copyarr(element *dest,element *source) // 데이터 넣기
{
memcpy(dest->array, source->array,sizeof(int)* DATA_SIZE);
}