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

Subin Kim·2021년 9월 14일
0

자료구조

목록 보기
3/9

🚨 'C언어로 쉽게 풀어쓴 자료구조' 라는 책을 활용했던 과거 수업 필기를 정리한 것입니다.
💡 Chapter 순서는 책과 같지만 교수님의 과거 수업 내용에 따라 일부 책과 다른 내용이 있습니다.

배열

  1. homogeneous(동질적)
  2. continuous(연속적)

ex) int a, b[3], d[2][3];

메모리 할당 (Memory Allocation)

  1. 정적 할당 (Static Memory Allocation) : 선언문 시작 전 고정 할당
  2. 고정 할당 (Dynamic Memory allocation) : 실행 도중 요청에 의해 임시적 할당malloc() 및 제거free()
p = b; // (ok) -> b의 주소값을 p로 가져옴
p[4] = -6 // -> b의 내용 바뀜 => 이미 만들어진 b의 공간을 공유
// <동적 할당> -> p에 100개 짜리 배열이 만들어짐
p = (int *)malloc(100 * (sizeof(int)));
free();

// d[5][10]을 만들고 싶을 때
q = d; // 기존의 이차원 배열 d를 그대로 사용
// or
q = (int **)malloc(5*sizeof(int*)); // 5개짜리 포인터배열
q[0] = (int *)malloc(10*sizeof(int)); // 각각의 포인터배열에 10개짜리 배열 넣어줌
q[1] = (int *)malloc(10*sizeof(int)); // ...
// ...
q[4] = (int *)malloc(10*sizeof(int)); //
// free(q) // -> q만 반납한 것, q[0]~q[4]는 남아있음(쓰레기처럼 떠돌아다님, 반납할 방법 X)
free(q[0]); free(q[1]); ... free(q[4]); free(q) // OK

구조체(Structure)

  1. 이질적 (heterogeneous)
  2. 연속적 (continuous)
typedef struct{
    char name[20];
    int age;
    float height;
    char addr[100];
    //...
 }student;
 student A, B, C[100], D[4][20], *E, **F; // 동적할당가능, 선언문의 키워드로 사용 가능
 
 A.name = "수빈";
 B.name = "주연";
 C[2].name = "재현";
 E = &B; // E : 주소값을 나타내는 포인터
 E->age = 27; // -> : 포인터 통해 접근할 때

typedef struct{
    char name[30];
    int age;
    Node P; // 불가능(무한루프처럼)
    Node *p, *q; // 구조체 자기자신을(만들어질) 가리키는 포인터 사용 가능 => 사이즈 알고있기 때문
}Node;
Node A, B, *F, ** G;


1. A.name = "수빈";
2. A.q = &B;
3. A.q -> age = 25; // q : 구조체 주소/ B.age를 쓴 것과 같은 효과
4. F = (Node *)malloc(sizeof(Node));
5. B.q = F;
6. F->q = &A; // F: 주소

0개의 댓글