본문 바로가기
언어/C언어

[c언어] 배열을 이용한 FIFO구조 만들기

by 코딩히어로 2023. 11. 19.
728x90

struct 형태의 배열 records가 있고, 이 배열에 새로운 데이터를 추가할 때마다, 기존 데이터를 하나씩 뒤로 밀어내고, 새 데이터를 배열의 첫 번째 위치에 저장하려고 합니다. 이렇게 하면 항상 최신 데이터에 빠르게 접근할 수 있으며, 오래된 데이터는 자연스럽게 배열의 끝으로 밀려나게 됩니다.

 

구조체 및 배열 정의


먼저, 사용할 struct를 정의합니다.

예를 들어, 각각의 Record가 온도 데이터를 포함하고 있다고 가정합니다

 

struct Record {
    // ... 여기에 다른 필드들 ...
    unsigned char tempData[10];
};

 

그리고 이 Record 타입의 배열을 선언합니다

 

#define RECORDS_SIZE 72
struct Record records[RECORDS_SIZE];

 

데이터 이동 로직
새 Record가 추가될 때마다, 기존의 모든 Record를 배열에서 한 칸씩 뒤로 이동시켜야 합니다.

이를 위해 다음과 같은 함수를 작성할 수 있습니다

 

void addNewRecord(struct Record newRecord) {
    for (int i = RECORDS_SIZE - 1; i > 0; i--) {
        records[i] = records[i - 1];
    }
    records[0] = newRecord;
}

 

 

이 함수는 newRecord를 매개변수로 받아, records 배열의 모든 원소를 뒤로 밀고, 배열의 첫 번째 위치에 newRecord를 저장합니다.

 

성능 고려사항
이 방식은 배열의 크기가 크지 않은 경우에 잘 작동합니다. 

하지만 배열의 크기가 매우 큰 경우, 데이터 이동에 상당한 성능 비용이 발생할 수 있습니다. 

이럴 때는 링 버퍼나 다른 데이터 구조를 고려하는 것이 좋습니다.

728x90
반응형

'언어 > C언어' 카테고리의 다른 글

[c언어] qsort 함수란?  (1) 2023.10.30
[C언어] malloc 함수란?  (0) 2023.10.30
[c언어] strcpy 함수  (1) 2023.10.30
[c언어] 멀티스레딩과 병렬 프로그래밍  (0) 2023.10.28
[C언어] strstr 함수 사용  (2) 2023.10.27

댓글