CS/자료구조

[ 자료구조 ] C언어 포인터 / 구조체 / 자기 참조 구조체 / 희소 행렬

psy_er 2021. 9. 20. 15:46
728x90

[ 자료구조 ] C언어 포인터 / 구조체 / 자기 참조 구조체 / 희소 행렬

 

배열

 

배열은 기억 장소에서 연속된 위치를 차지한다. sizeof() 함수는 데이터의 길이를 byte로 반환하는 함수이다. C 언어에서 sizeof(int)의 값은 2 byte이지만 시스템에 따라서 4 byte인 경우도 있다. list [0]은 기억 장소의 주소이기도 하다. 인덱스 값을 바꿀 때마다 n*sizeof(int)를 n*sizeof(int) 하면 좋다. 포인터 타입은 데이터가 기억 장소의 주소를 저장하는 타입이다. 사람이 사는 모든 집에 주소가 있고 컴퓨터의 기억 장소도 주소가 있다. 주소를 기억하는 변수가 포인터 변수이다. 배열 변수는 주소 값으로 처리한다. 그 이유는 배열의 내용 전체를 이동할 경우보다 주소 값을 알려주면 더 편하기 때문이다.

 

x = 10;

y = &x; 변수 x의 주소를 저장하는 y이다.

z = *y; 주소 y가 가리키는 곳의 내용의 저장하는 z이다.

따라서 z = x와 같은 의미가 된다.

 

 

 

구조체

 

구조체는 데이터를 표현하는 단위이다. 예시로 학생의 명단, 은행 거래 고객의 명단, 월별 판매액 등이 있다. 그러나 학생의 명단은 학생의 학번과 이름, 주소로 이루어져 있다. 고객 명단은 고객의 이름, 주소, 계좌번호 등으로 여러 개의 작은 값(필드)들이 합해서 한 개의 데이터를 구성한다. 이러한 데이터 타입은 복합 데이터에 해당된다. 복합 데이터를 1개의 변수로 표현하는 방법으로 구조체를 사용한다. 구조체는 각 데이터가 타입과 이름을 갖는다.

 

728x90

 

자기 참조 구조체

 

자기 참조 구조체는 구조체의 필드 중 하나가 구조체에 대한 포인터를 나타내는 타입이다. 앞으로 배울 연결 리스트, 트리, 그래프의 구현에 쓰이는 방법이다. 다른 구조체를 연결하고 있기 때문에 동적 기억 장소 구현에 쓰이는 방법이다. 기억 장소에 대한 포인터로 list 타입을 가리킨다. 아무것도 가리키지 않으면 0 값을 갖는다.

 

 

희소 행렬

 

희소 행렬은 배열의 응용 예시이다. 행렬은 2차원으로 된 자료이며, 배열을 사용하여 처리하는 대표적인 예이다. 여기서는 일반적인 행렬보다 행렬의 특이한 경우인 희소 행렬에 대해서 알아보자. 행렬을 더할 때 행과 열의 첨자가 같은 원소끼리 더해야 하므로 첨자가 같은 원소들이 있는지 찾는 것을 프로그램으로 표현하면 매우 복잡한 것을 알 수 있다. 희소 행렬은 자료구조를 바꿈으로써 컴퓨터자 자원인 기억 장소를 절약하지만, 프로그래밍이 어려워지는 것을 감수해야 하는 대표적인 예이다. 컴퓨터 통신에서 데이터를 압축해서 보내는 장단점이 있다.

728x90