18. 구조체와 연결 리스트
18-1 typedef 문법
기존 자료형의 이름이 너무 길어서 새로운 자료형으로 재정의해야 할 때 자주 쓰인다.
또한,
문법을 이해하기 힘들거나 자료형이 너무 복잡하게 적용되었을 때 좀 더 보기 편한 형태로 사용할 수 있다.
어떤 변수가 코드 전체에서 자주 사용될 경우, 자료형이 바뀌었을 때, 프로그래머가 일일이 수정을 해 줘야 하지만, typedef를 이용하면 맨 위에 선언을 하고 내려가기 때문에 수정할 때 typedef 부분만 수정해 주면 되므로 자료형에 변화가 생겼을 때 쉽게 대처할 수 있다.
18-2 데이터를 그룹으로 묶는 구조체
비슷한 형태의 데이터를 관리하려면,
여태까지 배우고 썼던 배열도 훌륭하지만, 개인별로 특성을 여러개 입력 받고 관리해야 한다면 개인 단위로 묶어서 그룹을 만드는 것이 더 좋을 수 있다.
그래서 크기나 형식이 다른 데이터를 그룹으로 묶어 사용할 수 있도록 Struct (구조체)
문법을 제공 - 기본 자료형이나 사용자가 정의한 자료형을 그룹으로 묶어서 새로운 자료형을 만들 수 있다.
또한, struct와 typedef를 조합해서 구조체 변수를 선언할 수 있다.
18-3 배열과 구조체
처리해야 할 데이터가 모두 하나로 통합, 매개변수의 개수를 줄일 수 있음, 포인터 표현도 단순해짐
그러므로 구조체를 사용해서 묶는 것이 관리하기도 편하고 좀 더 간단하게 표현할 수 있다.
18-4 구조체로 만든 자료형의 크기
구조체의 요소는 같은 크기끼리 모아 주는 것이 좋다.
18-5 구조체를 활용한 연결 리스트
포인터 1이 입력 받은 숫자 1과 다음에 입력 받을지도 모르는 포인터 2를 같이 묶어 가리키기연결 리스트
: 데이터를 저장할 때 데이터의 개수를 예상할 수 없고, 그 범위가 너무 넓을 때 사용
위와 같이 숫자와 포인터를 함께 저장하기 위해 할당한 메모리 - Node
라고 하며 이를 구조체로 만들자.
연결 리스트의 시작 상태 - Head pointer
: NODE 구조체의 첫 노드로 Null값으로 초기화
하지만 매번 다음 포인터에 주소를 가리키게 만드는 것은 매우 힘든 일이 될 것이므로 - 반복문 (while
)을 활용하여 축약하자.
+) head pointer가 NULL인지 여부를 체크해서 처음 노드를 만드는 작업이지를 구별
+) tail pointer
- 마지막 노드의 주소 값을 기억하는 포인터를 두면 가리키는 노드에 바로 새 요소를 추가할 수 있다.
+) 다른 포인터 변수로 옮겨 놓고 하나씩 해제 (free
)
'Programming Language > Do it! C언어' 카테고리의 다른 글
[Do it! C언어 입문] 20장. 함수 포인터 (0) | 2022.11.11 |
---|---|
[Do it! C언어 입문] 19장. 파일 입출력 (0) | 2022.11.11 |
[Do it! C언어 입문] 17장. 다차원 포인터 (0) | 2022.11.11 |
[Do it! C언어 입문] 16장. 메모리 할당 (0) | 2022.11.11 |
[Do it! C언어 입문] 15장. 배열과 포인터 (0) | 2022.11.11 |