0. 배열의 특징
- 배열은 사용할 메모리 크기를 고정해서 선언해야 함.
선언 후에는 절대 변경 불가능함.
즉, 추가/축소가 불가능함.
- 선언된 메모리는 연속적으로 할당됨.
1. 기본 코드
- 앞으로 연재될 모든 자료구조는 Clang C89 기준의
코드들로 이루어짐. 따라서, C가 가능하다면 모든 곳에서 될듯.
- C 스타일의 배열을 그대로 사용하기엔
메모리 스탬프가 걱정됨.
- 분할 컴파일을 통해서 배열을 아에 다른 파일에다가
정적으로 선언하고, 메모리 스탬프를 막을 정적 변수를
하나 더 선언 하고자 했음.
- 그마저도 한 문제에 여러 개의 배열이 필요할 수 있어서,
그냥 정적 배열이 아닌 구조체를 사용함.
뭔가 아주 살짝의 문법 어필도 가능할듯?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
enum {
FALSE = 0,
TRUE = 1,
INVALID_INDEX = -1,
MAX_COUNT = 101
};
typedef struct array {
int nArray[MAX_COUNT];
size_t uCount;
} array_t;
void insert(array_t* _pArray, size_t _uIdx, int _nData);
void orderly_remove(array_t* _pArray, size_t _uIdx);
void unorderly_remove(array_t* _pArray, size_t _uIdx);
size_t search(array_t* _pArray, int _nData);
void print(array_t* _pArray);
int main(void)
{
size_t i;
array_t arr = {0,};
for (i = 0; i < 5; ++i)
{
insert(&arr, i, (int)i * 2);
}
print(&arr);
orderly_remove(&arr, 2);
print(&arr);
unorderly_remove(&arr, 1);
print(&arr);
printf("1 is in %zu", search(&arr, 6));
return 0;
}
void insert(array_t* _pArray, size_t _uIdx, int _nData)
{
size_t i;
assert(_uIdx <= _pArray->uCount);
assert(_pArray->uCount < MAX_COUNT);
for (i = _pArray->uCount; i > _uIdx; --i)
{
_pArray->nArray[i] = _pArray->nArray[i - 1];
}
_pArray->nArray[_uIdx] = _nData;
++_pArray->uCount;
}
void orderly_remove(array_t* _pArray, size_t _uIdx)
{
size_t i;
assert(_uIdx <= _pArray->uCount);
--_pArray->uCount;
for (i = _uIdx; i < _pArray->uCount; ++i) {
_pArray->nArray[i] = _pArray->nArray[i + 1];
}
}
void unorderly_remove(array_t* _pArray, size_t _uIdx)
{
assert(_uIdx < _pArray->uCount);
_pArray->nArray[_uIdx] = _pArray->nArray[--_pArray->uCount];
}
size_t search(array_t* _pArray, int _nData)
{
size_t i;
for (i = 0; i < _pArray->uCount; ++i)
{
if (_nData == _pArray->nArray[i])
{
return i;
}
}
return INVALID_INDEX;
}
void print(array_t* _pArray)
{
size_t i;
for (i = 0; i < _pArray->uCount; ++i)
{
printf("[%zu]: %d\n", i, _pArray->nArray[i]);
}
}
'C > 자료구조와 알고리듬' 카테고리의 다른 글
Chapter 06. 스택(Stack) (2) | 2021.11.10 |
---|---|
Chapter 05. 가변 길이 배열(Variadic Array) (0) | 2021.11.10 |
Chapter 03. 정렬 (0) | 2021.06.18 |
Chapter 02. 탐색 (0) | 2021.06.17 |
Chapter 01. 자료구조와 알고리듬 (0) | 2021.06.17 |
댓글