반응형
1. 개념
- 정적 할당 : 변수 선언을 통해 필요한 메모리 할당
- 동적 할당 : 실행 중에 운영체제로부터 할당 받음 (by Heap)
2. 사용법
malloc() / free()
* stdlib.h 을 include 해야 함
1) 기본 타입 메모리
int *pInt = (int *)malloc(sizeof(int));
char *pChar = (char *)malloc(sizeof(char));
2) 배열 타입 메모리
int *p = (int *)malloc(sizeof(int) * 5);
3. 예시 문제
1) 임의의 정수 n개를 입력받아 n개의 난수를 만들어(0~999) 이를 오름차순을 정렬하는 프로그램
(동적할당 + 선택정렬)
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n, i;
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
srand((unsigned)time(NULL));
for(i=0; i<n; i++){
arr[i] = rand() % 1000;
printf("%d ", arr[i]);
}
printf("\n\n");
// selection sort
int j, k, max, maxIdx, tmp;
for(k=0; k<n-1; k++){
max = arr[0];
maxIdx = 0;
for(j=0; j<n-k; j++){
if(max < arr[j]){
max = arr[j];
maxIdx = j;
}
}
// 젤 뒤로 보내기
tmp = arr[n-1-k];
arr[n-1-k] = arr[maxIdx];
arr[maxIdx] = tmp;
}
for(i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
(동적할당 + 버블정렬)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int n, i;
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
srand((unsigned)time(NULL));
for(i=0; i<n; i++){
arr[i] = rand() % 1000;
printf("%d ",arr[i]);
}
printf("\n");
// bubble sort
int j, k, tmp;
for(k=0; k<n-1; k++){
for(j=0; j<n-1-k; j++){
if(arr[j] > arr[j+1]){
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
for(i=0; i<n; i++){
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
반응형
'Computer Science > Data Structure' 카테고리의 다른 글
[알고리즘] 최소신장트리(MST) / 크루스칼 / 프림 (0) | 2021.05.31 |
---|---|
[문제해결기법 04] 정렬 - 선택/버블/삽입/머지/퀵정렬 (0) | 2021.04.23 |
[문제해결기법02] 뽑기 - 조합/순열 (0) | 2021.04.23 |
[문제해결기법01] 순환(재귀) recursion (0) | 2021.04.07 |
자료구조 4 탐색 (0) | 2020.12.10 |