![[16] C review < 이중연결리스트 Music Library Program 기본동작들 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIMXHR%2FbtrmteWUFUP%2FLX1IiOnXtjHai838iwIYy0%2Fimg.png)
이제부터 이중연결리스트를 응용한 알고리즘을 살펴보겠습니다. 다음은 Music Library Program의 실행예입니다. 다음은 저장된 음악 프로그램 목록입니다. 아티스트와 음악 저장경로를 구분하기위해 #을 사용하였습니다. 다음은 Artist,Song,path간에 자료구조를 나타낸 그림입니다. 좀 더 자세히 살펴보면, Artist 노드안에 이중연결리스트로 구현된 SNode가 존재하고 하나의 SNode안에 Song노드가 존재하여 해당 Song의 정보를 나타내고 있습니다. 여기서 주의해야 할 점은 Song은 SNode안의 하나의 데이터일 뿐 연결리스트가 아닙니다. 이처럼 번거롭게 자료구조를 편성한 이유는 즉, 노드와 데이터를 분리하는 이유는 노래들에 대해서 다양한 접근경로를 제공하기 위해서입니다. 예를들어 ..
![[15] C review < 이중연결리스트 > 과제 수정 필요](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca7pbO%2FbtrmhvlHZ3d%2F5ITEW7udXbMXJQN4XMjCIK%2Fimg.png)
단방향 연결 리스트(single linked list)의 한계 - 어떤 노드의 앞에 새로운 노드를 삽입하기 어려움 - 삭제의 경우에 항상 삭제할 노드의 앞 노드가 필요 - 단방향의 순회만이 가능 이중 연결 리스트 - 각각의 노드가 다음(next)노드와 이전(previous)노드의 주소를 가지는 연결 리스트 - 양방향의 순회(traverse)가 가능. 각 노드에 하나의 문자열이 저장된다고 가정하자. #include #include struct node { char *data; struct node next; struct node prev; }; typedef struct node Node; Node *head; Node *tail; int size = 0; 노드를 삽입하는 경우를 알아봅시다. 이 과정은 순..