연결리스트 3

[CS50] 연결리스트 : 트리

지난 포스팅에서 연결 리스트를 활용해 다양한 데이터 구조를 만들어봤습니다. 연결 리스트는 각 요소가 다른 요소를 하나씩만 가리키고 있었는데 만약 가리키는 요소가 더 많아진다면 어떻게 될까요? 오늘은 연결 리스트 기반의 자료구조인 '트리'에 대해 공부해보도록 하겠습니다. 트리는 기존 연결리스트의 각 노드들의 연결과 달리 2차원적으로 구성되어있는 연결입니다. 각 노드는 일정한 층에 속하게 되고, 다음 층의 노드들을 가리키는 포인터를 갖게 됩니다. 쉽게 그림으로 표현하자면 이렇게 기존 연결 리스트의 각 노드들이 1차원적으로 연결되어 있었다면 트리는 이렇게 표현합니다. 여기서 가장 높은 층에서 트리가 시작되는 노드를 '루트'라고 합니다. 루트 노드는 다음 층의 노드들을 각각 가리키고 있고 이를 '자식 노드'라고..

[CS50] 연결리스트 : 시연

이번 포스팅에선 저번 포스팅의 내용을 실제 강의에서 어떤 방식으로 학생들이 시연하는지를 보고 이해하는 것이 편할 것 같아 링크를 남깁니다. https://www.boostcourse.org/cs112/lecture/119040?isDesc=false 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 이 영상을 보고 지난 시간에 코딩했던 코드를 보면 이해가 빠를겁니다. #include #include //지난 시간에 포스팅한 node 구조체 정의 typedef struct node { int number; struct node *next; } node; int main(void) { //list라는 이름의 node 포인터를 정의함과 동시에 NULL로 초..

[CS50] 연결리스트 : 코딩

지난 포스팅에서 연결 리스트의 정의와 리스트의 기본 단위가 되는 구조체를 정의하는 방법에 대해 공부했습니다. 오늘은 이 구조체를 이용해 실제로 연결 리스트를 구현하고 사용해보도록 하겠습니다. 실제로 그림과 같이 리스트에 숫자 2가 저장되어있다고 할때 그림과 같이 숫자 4를 추가하려면 어떻게 해야 할까요? 코드로 작성해보면 node *n = malloc(sizeof(node)); if (n != NULL) { n->number = 4; n->next = NULL; } 이런 식으로 작성해서 4를 넣기 위한 새로운 node를 할당받아야 합니다. 하지만 이렇게 node를 만들기만 한다고 끝나는 것이 아니라 화살표도 연결해줘야 list와 연결된 숫자임을 알 수 있습니다. 어떻게 화살표를 추가해야 할까요? 여기서 ..