[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(2)
2022. 9. 20. 16:52ㆍCS/자료구조
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
1. 연결 리스트 예제프로그램
- 연결 리스트는 노드 10개를 미리 만들어두고 사용하지 않고
- 필요한 그때그때마다 노드를 만들어서 연결 리스트에 추가한다.
- 연결 리스트 예제프로그램 목표
struct node{
char * data;
struct node * next;
};
typedef struct node Node;
Node *head = NULL;
1-1. 2nd
int main(){
//어떤 구조체를 가리키는 포인터 head
Node *head = (Node *)malloc(sizeof(Node));
//head가 가리키는 구조체 안의 data 멤버를 엑세스할 때 화살표 연산자를 쓴다.
//head->data = "2nd";
head->data = "2nd";
//head가 가리키는 구조체는 첫 번째이자 마지막 노드이기 때문에 NULL 저장
//마지막 노드임을 표시
head -> next = NULL;
}
1-2. 3rd
//새로 만드는 노드의 주소를 가리키는 q
Node *q = (Node *)malloc(sizeof(Node));
q -> data = "3rd";
q -> next = NULL;
//2nd -> 3rd의 순서를 가지려면
//2nd 노드의 주소 필드가 3rd를 가리켜야 한다.
//2nd 노드의 주소 필드 접근: head -> next
//3rd를 가리키려면: head -> next = q(새로 만드는 노드의 주소를 가지고 있음)
head -> next = q;
1-3. 1st
//앞서 사용했던 q는 쓰임이 다했기 때문에 재활용
q = (Node *)malloc(sizeof(Node));
q -> data = "1st";
//1st를 가장 앞에 연결해야 1st-2nd-3rd의 순서를 가짐
//2nd의 주소는 head가 가지고 있다.
//1st 노드의 주소 필드 접근: q -> next
//2nd의 주소를 가리키려면: q -> next = 2nd
q -> next = head;
//첫 번째 노드의 주소를 보관 하는 head
head = q;
1-4. 출력
//현재 head에 저장된 값은 첫 번째 노드의 주소를 저장
//p가 첫 번째 노드를 가리킴
//head를 바로 사용하지 않는 이유
//마지막에 head가 가리키는 값이 NULL이 되면
//연결리스트의 첫 번째 노드의 주소를 보관할 수 없게 됨
Node *p = head;
while(p != NULL){
printf("%s\n", p->data);
//현재 p가 가리키고 있는 노드의
//next필드에 저장된 값(그 다음 노드의 주소)을 p에 써라
//=> p가 한 칸 앞으로 전진
p = p -> next;
}
부경대학교 권오흠 교수님의 [c로 배우는 자료구조 및 여러 가지 예제 실습] 강의 정리입니다. 감사합니다.
https://www.youtube.com/watch?v=BP9lJ-Fq72w
728x90
'CS > 자료구조' 카테고리의 다른 글
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(4) (1) | 2022.10.19 |
---|---|
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(3) (1) | 2022.10.18 |
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(1) (0) | 2022.09.20 |
[자료구조 - C언어] 자료구조 [1강-10강] 복습 및 정리 (0) | 2022.08.17 |
[자료구조 - C언어] 자료구조 제10강: 전화번호부 v5.0 (0) | 2022.08.09 |