티스토리 뷰

1. 개요



[그림 1] 인접리스트로 표현한 그래프



이전에는 인접행렬이 아닌 링크드리스트를 이용하여 인접리스트로 그래프를 표현하는 방법에 대해 알아보겠다.


인접행렬이 최소그래프에 있어서 메모리 낭비가 심했다면, 인접리스트는 정점의 갯수, 간선의 갯수만큼 메모리를 할당하므로 메모리적인 측면에 있어 인접행렬법보다 좋다. 따라서 최소그래프 표현에 적합하다.


그림과 같이 각 정점에서 간선으로 연결된 정점들을 리스트 형태로 연결해 놓는 기법이다.



(※ 인접리스트법도 당연히 무방향 그래프에서의 대칭성을 고려하여 코드를 구현하여야 한다)






2. 그래프 구현


1. 구조체 및 함수 선언 
 

노드구조체 , 인접리스트 그래프 구조체를 선언

인접리스트 그래프 구조체에는 동적할당 시켜줄 최대정점갯수만큼의 방을 가진 2차원 배열을 선언한다. (헤드노드)



 2. 인접리스트 초기화 
 

인접행렬때와 마찬가지로 파일을 불러와 인접리스트를 초기화 시킨다. 다른점은 배열에 해당 값들을 넣지않고 addNode()함수를 통해 해당 값을 리스트에 넣어준다.

 3. 노드 추가 
 

두 정점의 관계를 리스트에 등록하는 함수로 전달인자로는 이어줄 정점 2개와 그래프 정보 구조체의 주소를 받는다.

새로운 간선 정보 노드를 메모리 할당해주고 그 새 노드의 next에 인접리스트 그래프 구조체 헤드노드의 첫번째 전달인자 방을 넣어주고
그 노드의 정점정보에 두번째 전달인자 정점을 넣어준다 ( 이름 새기는 것 ) 그리고 헤드노드의 첫번째 전달인자 방이 가리키는 곳을 새로 할당한 노드로 바꿔준다.

무방향 그래프에서의 대칭성을 고려하여 역 방향도 위와 같은 방법으로 초기화시켜준다.

 4. 그래프 출력 
 

리스트의 순서대로 출력을 한다.

 5. 그래프 소멸 

헤드노드를 모두 메모리 해제시켜준다.


'프로그래밍 > 자료구조' 카테고리의 다른 글

5. 그래프 (Graph) - 인접행렬법  (0) 2016.08.23
4. 이진 트리 (Binary Tree)  (0) 2016.08.23
3. 원형 큐 (Circular Queue)  (0) 2016.08.22
2. 스택 (Stack)  (0) 2016.08.22
1. 링크드 리스트 (Linked List)  (0) 2016.08.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함