728x90
자료구조의 정의
데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계
데이터 단위란 데이터를 구성하는 한 덩어리이고, 자료구조는 쉽게 말해서 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법을 말한다.
배열
같은 자료형의 변수로 이루어진 요소가 직선 모양으로 줄지어 있는 자료구조.
배열이름[인덱스] 의 형태로 되어있고, 접근도 저렇게 할 수 있다.
배열 요솟값 초기화
int a[5] = {1, 2, 3, 4, 5}; 처럼 선언할 때 미리 값을 대입한다.
배열의 요소 개수 구하기
sizeof(a) = 전체 배열의 할당된 메모리 크기, sizeof(a[0]) = 첫번째 요소가 할당된 메모리 크기
요소 개수 = sizeof(a) / sizeof(a[0])
! 인덱스, 즉 요소 개수는 상수만 가능하다. n과 같은 변수를 넣으면 컴파일 오류 발생
But, 변수를 사용해서 배열을 선언한 것처럼 하는 방법: 동적할당 (calloc, malloc)
calloc 함수
형식 | void *calloc(size_t nmemb, size_t size);
해설 | 크기가 size인 자료가 nmemb개만큼 들어갈 메모리를 할당한다. 할당한 메모리 영역은 모든 비트가 0으로 초기화 된다.
malloc함수
형식 | void *malloc(size_t size);
해설 | 크기가 size인 메모리를 할당하고, 할당한 메모리의 값은 정의되지 않는다.
calloc, malloc은 #include<stdlib.h>의 헤더를 갖고, 반환값은 성공하면 첫번째 포인터, 실패하면 NULL 포인터를 반환한다.
C 언어의 메모리 구조
할당하는 메모리 영역은 데이터, 스택, 힙 영역으로 나누어진다.
데이터 영역, 스택 영역은 컴파일러가 미리 공간을 예측하고 할당하는 곳이다.
힙 영역은 다른 영역을 모두 할당하고 남은 빈 공간이다. 그래서 동적 할당을 통해 생성된 동적 변수를 관리하기 위한 영역이다. 동적 변수는 공간 할당을 정확하게 예측할 수 없으므로 프로그램 실행 중에 결정한다.
배열의 동적 생성 과정
힙 영역에 할당 -> 사용(접근) -> 사용 후 필요없어지면 free 함수로 메모리 해제
난수의 생성
난수의 생성 단계 요약
1. 헤더 선언(rand, srand, time 포함한 헤더)
2. 난수의 seed를 초기화하기 위해 srand 함수 호출 -> 한번
3. 난수 생성하기 위해 rand 함수 호출 -> 필요할 때마다
배열 요소를 역순으로 정렬하기
a[i]와 a[n-i-1]을 교환하면 된다.
이를 for문으로 나타내면 아래와 같다.
for(i = 0; i < n / 2; i++) {
int t = a[i];
a[i] = a[n-i-1];
a[n-i-1] t;
}
기수 변환
- n진수 = n의 거듭제곱 형태
- 10진수 정수 -> n진수 정수로 변환하기
위 사진은 이산 수학에서 배우는 부분을 가져온 것이다. 저렇게 n으로 몫이 0이 될 때까지 나눠주고 나머지를 다듬으면 그의 변환값이 되는 것이다. 이를 프로그래밍으로 구현하면 된다.
++a VS a++
++a는 식 계산 전에 미리 증가 시키기.
a++는 식 계산 후 증가 시키기.
'C언어 > Do it! 개념 정리' 카테고리의 다른 글
#2-1. 기본 자료구조 - 배열(소수의 나열) (0) | 2022.02.20 |
---|---|
#1-2. 반복 (0) | 2021.12.31 |
#1-1. 기본 알고리즘 (0) | 2021.12.28 |
#0. 시작 (0) | 2021.12.28 |