이번 글은 서강대학교 소정민 교수님의 강의와 Ellis Horowitz의「Fundamentals of Data Structures in C」를 바탕으로 작성했음을 밝힙니다.
배열(array)은 같은 타입의 변수들로 이루어진 유한 집합으로 정의됩니다.
추상적으로 정의하면, Array는 데이터를 저장하는 방법 중 <index, value>의 형식으로 저장하는 방법입니다. 즉, Array는 value만을 저장하는 것이 아니라(단순히 '일련의 연속적인 메모리 위치'가 아님), index를 붙여서 같이 저장하는 자료구조라고 할 수 있습니다.
Array는 C에서 정말 많이 쓰는 자료구조이며, 많은 고급 자료 구조를 표현하는 데 이용됩니다.
Array는 메모리상 연속된 공간에 잡힙니다. 코딩을 통해 특정 메모리에 할당하라고 명령할 수는 없지만, 메모리를 잡을 때 특정 메모리(Base Memory)부터는 연속적으로 저장됩니다.
O(1)
에 해당 원소로 접근할 수 있습니다.O(n)
O(1)
O(n)
O(1)
Implementing Basic Array
<#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
float sum(float[], int);
float input[MAX_SIZE], answer;
int i;
void main() {
for (i = 0; i < MAX_SIZE; i++)
input[i] = i;
answer = sum(input, MAX_SIZE);
printf("the sum is: %f\n", answer);
}
float sum(float *list, int n) {
int i;
float tempsum = 0;
for (i = 0; i < n; i++)
tempsum += list[i];
printf("address of list: %p\n", list);
return tempsum;
}
Printing Array with pointer
#include <stdio.h>
#include <stdlib.h>
void print1(int*, int);
void main() {
int one[] = { 0, 1, 2, 3, 4 };
print1(one, 5);
}
void print1(int* ptr, int rows) {
int i;
printf("address contents\n");
for (i = 0; i < rows; i++)
printf("%8p%5d\n", ptr + i, *(ptr + i));
}
Dynamic Allocation using malloc and realloc
# include <stdio.h>
# include <stdlib.h>
void main() {
int i, n, m, * data;
printf("How many integers do you want to generate? ");
scanf_s("%d", &n);
data = malloc(n * sizeof(int));
printf("memory allocated at %p\n", data);
for (i = 0; i < n; i++)
data[i] = rand() % 100;
printf("How many integers do you want to generate additionally? ");
scanf_s("%d", &m);
data = realloc(data, (n + m) * sizeof(int));
printf("memory reallocated at %p\n", data);
for (i; i < n + m; i++)
data[i] = rand() % 100;
for (i=0; i < n + m; i++)
printf("%3d: %8d\n", i + 1, data[i]);
free(data);
}