자료구조

[자료구조] chap3. 배열, 구조체, 포인터

haejuni 2024. 10. 12. 21:21

3.1 배열

-동일한 타입의 데이터 한 번에 여러 개 만들 때 사용.

-배열 사용하면 연속적 메모리 공간이 할당되고 인덱스번호 사용하여 쉽게 접근 가능, 반복루프 이용

 

-배열 ADT: 배열은 <인덱스, 값>의 쌍으로 이루어진 집합(index 주어지면 해당 value가 대응)

ㄴ연산: set(주어진 인덱스에 값 저장), get(인덱스 주어지면 값 추출)

 

  • 1차원배열: 

 

*인덱스 0부터 시작

 

 

 

 

컴파일러: 배열에 메모리의 연속된 위치에 할당> list[0] 이 기본주소(base)

프로그램에 list[i]라 적으면 컴파일러는 base+i*sizeof(int)에 있는 값 가져옴

 

  • 2차원 배열: list[0][0] 0행 0열에서 시작. 

 

3.2 구조체

 

-구조체: 타입이 다른 데이터 묶는 방법, struct 키워드 써서 표기

 

 

구조체 tag: 구조체와 구조체를 구별할 수 있게 해주는 식별자. 

 

 

-실제로 구조체 만들려면 struct studentTag s; 선언해줘야 함.

 

-구조체 사용은?

 

 

 

 

 

-typedef 사용하여 구조체 새로운 타입으로 선언 가능

 

 

 

 

-> student가 새로운 데이터 타입의 이름 됨.

> student 만 사용하여 변수 선언 가능.(int 나 float처럼)

 

 

 

 

 

 

 

 

3.3 배열의 응용: 다항식

[다항식 표현]

 

1. 모든 차수 계수값을 배열에 저장

 

 

 

 

 

>>단점; 대부분 항이 0인 다항식에서는 공간의 낭비가 심함

 

 

2. 다항식에서 0이 아닌 항만을 하나의 전역 배열에 저장. ( (계수, 차수)의 형식으로 구조체 배열에 저장.

 

 

 

 

>> 단점: 하나의 다항식이 시작되고 끝나는 위치 가리키는 인덱스 변수 관리해야 함. 차수도 저장해야 함> 다항식에 따라 첫번째 방식보다 공간 더 필요로 할수도! +연산 구현도 어려워짐

 

 

 

 

 

 

 

3.4 배열의 응용: 희소행렬

1. 행렬 2차원배열로 나타내기

 

 

 

 

 

 

 

 

>> 희소행렬(많은 항들이 0으로 되어 있는 행렬)인 경우 메모리 낭비 심함.

 

 

2. 행렬 배열로 나타내되  0이 아닌 항만 표현

 

 

 

 

 

 

 

 

 

 

>> 전치연산(대각선 기준 (i,j)->(j,i) 구현할때는 방법 1이 더 빠름.

 

 

 

3.5 포인터

 

-포인터: 다른 변수의 주소를 갖고 있는 변수

 

-p는 int 형을 가리키는 포인터로 정의. p가 a를 가리키게 하려면 a의 주소를 p에 대입. 

변수의 주소는 &연산자를 변수에 적용시켜서 추출

 

  • &연산자: 주소연산자 - 변수의 주소를 &연산자로 추출하여 p에 대입
  •  *연산자: 간접참조 연산자-포인터가 가리키는 장소에 값 저장

-> *p= a (동일한 실제적 객체 가리킴)

 

-null 포인터: 어떤 객체도 가리키지 않는 포인터(NULL)_포인터가 아무것도 가리키고 있지 않으면 항상 널 포인터 상태로 만들어놓기

 

-배열의 이름=배열의 시작위치 가리키는 포인터

 

3.6 동적 메모리 할당

-동적 메모리 할당: 필요한 만큼의 메모리를 운영체제로부터 할당받아 사용, 사용 끝나면 시스템에 메모리 반납

ㄴ동적 메모리 할당되는 공간: 히프(운영체제가 사용되지 않는 메모리 공간 모아놓음)

 

 

 

 

 

 

1. malloc()함수는 size 바이트만큼의 메모리 블록 할당, sizeof 키워드는 변수나 타입 크기 숫자 반환. 크기 단위: byte.

2. 동적 메모리는 포인터로만 사용할 수 있음. *p는 p가 가리키는 장소. 

3. free()함수는 할당된 메모리 블록 운영체제에게 반납(malloc() 함수가 반환했던 포인터 값 잊어버리면 동적메모리 반환 불가.) , malloc은 시스템 메모리가 부족해서 요구된 메모리 할당할 수 없으면 NULL 반환.

 

<구조체와 포인터>

-ps가 구조체를 가리키는 포인터일때.

 

'자료구조' 카테고리의 다른 글

[자료구조] chap6. 연결리스트 I  (1) 2024.10.18
[자료구조] chap5. 큐  (0) 2024.10.17
[자료구조] chap4. 스택  (4) 2024.10.16
[자료구조] chap2. 순환  (0) 2024.10.07
[자료구조] chap1. 자료구조와 알고리즘  (2) 2024.09.24