포인터
- & : 주소 연산자
- * : 간접지시 연산자
int i, j, *pi, *pj;
i = 20;
pi = &i;
j = *pi;
*pi = 10;
pj = &j;
*pi = *pj;
value | address | |
i | 3000 | |
j | 20 | 3004 |
pi | 3000 | 3008 |
pj | 3004 | 30012 |
동적 메모리 할당 (heap 기법)
malloc
- 필요한 양의 공간을 요구하는 함수
- 사용할 경우 : 메모리 영역의 시작 주소 반환
- 사용하지 않을 경우 : Null 포인터 반환
+ free() 함수 : 영역을 시스템에 반환
int i, *pi;
float f, *pf;
i = 1024;
pi = (int *)malloc(sizeof(int));
*pi = i;
f = 3.14;
pf = (float *)malloc(sizeof(float));
*pf = f;
printf("%d %d %f %f", i, *pi, f, *pf);
free(pi);
free(pf); //free 사용하지 않을 시 에러가 발생할 수 있다.
value | address | |
i | 1024 | 9000 |
pi | 12000 | 9004 |
f | 3.14 | 9008 |
pf | 12004 | 9012 |
... | ... | |
1024 | 12000 | |
3.14 | 12004 |
알고리즘
특정한 일을 수행하는 명령어들의 유한 집합
조건
- 입력 : 외부에서 제공되는 데이터가 0개 이상이어야 한다.
- 출력 : 적어도 하나의 결과를 생성해야 한다.
- 명확성 : 모호하면 안 된다.
- 유한성 : 한정된 수 뒤에는 종료한다.
- 유효성 : 실행 가능해야 한다.
선택정렬
서로 다른 정수를 정렬하는 프로그램
주어진 리스트에서 최소값을 찾아 제일 앞에있는 값과 교체하는 방식을 반복한다.
void sort(int list[], int n){
int i, j, min;
for(i=0; i<n-1; i++){
min = i;
for(j=i+1; j<n; j++)
if(list[j] < list[min]) min = j;
swap(&list[i], &list[min]);
}
}
void swap(int *x, int *y){
int temp = *x;
*x = *y;
*y = temp;
}
// 매크로 정의
#define SWAP(x, y, t) ((t)=(x), (x)=(y), (y)=(t))
이진 탐색 (Binary Search)
이미 정렬된 배열에서 searchnum이 있는지 검사하는 프로그램
중간값을 기준으로 searchnum이 중간값보다 작으면 중간값 왼쪽값들로,
searchnum이 중간값보다 크면 중간값 오른쪽에 있는 값들을 가지고 다시 탐색하는 방식이다.
ex)
#define COMPARE(x, y) ((x)<(y)? -1 : ((x)==(y))? 0 : 1);
int compare (int x, int y){
if(x < y) return -1;
else if(x == y) return 0;
else return 1;
}
int binsearch(int list[], int searchnum, int left, int right){
while(left <= right){
mid = (left+right)/2;
switch(COMPARE(list[mid], searchnum){
case -1 : left = mid+1; break; // list[mid] < searchnum
case 0 : return mid; // list[mid] == searchnum
case 1 : right = mid-1; // list[mid] > searchnum
}
}
return -1; // 못 찾은 경우
}
데이터 추상화
- 기본 자료형
- char
- int
- float
- double
- 자료의 그룹화
- 배열 : 같은 자료형
- 구조 : 다른 자료형
성능 분석
- 성능평가
- 성능평가 : 시간과 공간의 추산, 복잡도 이론
- 성능 측정 : 컴퓨터 의존적 실행시간
- 정의
- 공간 복잡도 : 프로그램 실행 완료시 필요한 공간의 양
- 시간 복잡도 : 프로그램 실행 완료시 필요한 컴퓨터? 시간의 양
'학교 > 자료구조' 카테고리의 다른 글
5. 이중 연결리스트 (0) | 2022.03.14 |
---|---|
4. 연결 리스트 (0) | 2022.03.14 |
3. 스택과 큐 (0) | 2021.09.28 |
2-2. 다항식 (0) | 2021.09.27 |
2-1. 배열과 구조 (0) | 2021.09.27 |