자료구조의 많은 구조 중 배열에 대해서 알아보도록 하겠습니다.
(c언어를 조금이라도 알고있다고 가정해서 설명하고 있습니다.)
(데브씨,devc++로 소스파일을 작성하고 컴파일하고 런 했습니다. ㅎㅎ)
우선 배열의 기초를 알아봅시다.
배열을 써먹으려면 배열은 선언하는 법부터 알아야겠죠?
배열은 "자료형 배열이름[ 배열크기];" 이렇게 선언합니다.
다시말하자면 배열을 선언하는데에는
배열에 들어갈 값의 자료형
배열의 이름
배열의 크기
이 3가지가 필요하다는 겁니다.
예를 들어 int a[5];라고 선언하면
5칸짜리 배열이 만들어지고
배열의 첫번째 칸의 이름은 0
두번째 칸의 이름은1
...
다섯번째 칸의 이름은4 가 됩니다.
즉 a[1]이라하면 이름이0 인 칸을 말하는 것입니다.
(주소를 뜻하는 것이죠ㅎㅎ)
그럼 배열을 왜 만드느냐????
더욱 본질적으로 말하자면 자료구조를 왜 잘만들어놔야하냐??
앞에서 말했다시피 자료구조가 난장판이면 그 자료를 이용하는데에
메모리 낭비, 시간 낭비를 해서 그렇습니다.
아하 그럼 배열을 쓰는 이유는 자료에 더욱 쉽게 접근하기 위해서구나
뭐 자료마다 다르겠지만 그렇다고 볼 수 있습니다.
그렇다면 자료를 이용하려면 함수가 있어야 하는데
어떤식으로 작동하는지 알아야겠죠??
일종의 함수를 만들어보겠습니다.
void copy_array(int a[],int b[], int len) // 얘는 3가지가 필요하구나?
{
int i;
for (i=0; i<len; i++) // 0부터 배열의 크기보다 작아질 때까지 for문이 반복되겠구나.
b[i]= a[i]; // a의 배열이 b로 복사되는 구나>>>a가 b한테 값을 주는구나??
}
copy_array라는 함수를 만들었습니다. 바로 배열을 복사하는 함수입니다.
하나 더 함수를 만들어보겠습니다.
void copy_variable(int a, int b)
{
b=a;
}
얘는 배열이 아닌 변수를 복사하는 함수입니다.
함수를 2개를 만들었으니깐 써봐야겠죠??
void main(){
int A[5]={10,20,30};
int B[5],i,x=2018,y=0;
copy_variable(x,y);
copy_array(A,B,5);
printf("변수 복사 결과: x=%d, y=%d\n",x,y);
printf("배열 복사 결과: \n");
for (i=0; i<5; i++){
printf ("A[%d]= %d\t",i,A[i]);
printf ("B[%d]= %d\n",i,B[i]);
}
}
어떤 결과가 나올까요??
??? 변수는 분명 복사를 했는데??? 왜 그대로지???
배열은 복사가 잘됐는데 변수만 그러네???
여기서 큰 차이가 나옵니다.
흔히 말하기를 주소를 참조했느냐 아니면 값을 그냥 복사해서 끌어온거냐
이렇게 말하곤 하는데
call by value니 뭐니 이런 것 말고 쉽게 설명하겠습니다.
a와 b가 게임을 하다가 싸워가지고 현피를 뜨러옵니다.
a가 이겨서 b의 버릇을 고쳐줬습니다.
그런데 b가 집에 갔더니 또 나댑니다.
그래서 이번엔 b의 집주소를 알아내서 가서 조졌습니다.
그랬더니 b의 버릇이 고쳐졌습니다. ㅎㅎㅎ
먼 개소리냐구여???
a의 값을 b에게 주는 것을 표현한 것인데
"버릇" = 값
"주소 "= 포인터
그니까 b를 집에서 불러내서 버릇을 고쳐주느냐?(값만 불러옴)
b의 집에 찾아가서 버릇을 고쳐주느냐?(주소 참조) 의 차이입니다.
즉 다시 말해서
a[1] 은 a[1]안에 들어있는 값을 말하기도 하지만
실제로 문장에서 쓰인다면 주소를 찾아가서 값을 보여주는 것이라고 보면 되겠습니다.
오늘은 이만 ㅂㅂ
'컴퓨터(Computer Science) > 자료구조(Data Structure)' 카테고리의 다른 글
[C언어] 자료구조 - Tree 트리 -1 (0) | 2019.12.15 |
---|---|
[C언어] 자료구조 - Hash 체이닝(chaining)-3 (0) | 2019.12.15 |
[C언어] 자료구조 - Hash -오버플로우 처리 방법 및 기본 연산-2 (0) | 2019.12.15 |
[C언어] 자료구조 - Hash 해시 ,해싱-1 (3) | 2019.12.15 |
자료구조란 뭘까? (+추상자료형) (1) (0) | 2019.10.16 |