프로그래밍[Univ]/데이터구조

[리스트]링크드리스트 (연결리스트) 5/23

Cloud Travel 2011. 5. 23. 13:56
연결리스트에 대해서 알아보자...
일단 연결리스트는 노드들로 구성되어있는 자료구조이다.

여기서 노드라하면 저장할 자료와 다음 노드를 가르키는 포인터를 가지고 있는 것을 말한다,
즉, "노드 = 자료 + 링크"라 할 수 있다.

이제 본격적으로 링크드 리스트의 종류에 대해서 알아보자...

1. 단순 연결리스트
 말 그대로 단순한 연결리스트이다-_-; 선형구조를 이루고 있다.

2. 원형 연결리스트
 리스트의 마지막 노드가 리스트의 첫번째 노드를 연결하는(가르키는) 자료구조이다.

3. 이중 연결리스트
 노드들이 양방향으로 연결되어 있는 연결리스트를 말한다.
 특정 노드 기준으로 이전 노드에 접근하기 쉬운 장점이 있다.(접근의 편의성!!)
 이에 비해, 메모리 공간을 더 사용해야 하는 단점이 있다.

... 간단하게 연결리스트의 종류에 대해서 알아봤다.
각 상황에 맞춰서 필요한 자료구조를 선택해서 사용하다록 하자.
그렇다면 여기서 끝이냐? 그것은 아니다... 연결리스트에서의 한가지 Tip을 가르쳐주도록 하겠다...

* 해더 노드 vs 해더 포인터
 해더 노드와 해더 포인터라는 것은 다음 과같은 것을 말한다.
 - 해더 노드
 struct Linkedlist{
   int count;
   node HeadNode;
   // 리스트 구현시 자료를 저장하는 것이 아닌 추가/삭제 구현에 간편성을 더하기 위해서 사용된다.
   // 일종의 더미 노드이다.
  }

 - 해더 포인터
  struct Linkedlist{
   itn count;
   node *ptr_node;
   //연결리스트의 첫 부분만을 가르키는 포인터이다. 추가/삭제 구현시 복잡도가 높아진다.
  }

직접 해더 노드와 해더 포인터를 사용하여 작성해보지 않으면 장/단점을 쉽게 구분 할 수 없을 뿐더러.
도움도 안되니 직접 한번 작성해보기를 권고한다.
--------------------------------------------------------------------------------------------------
~에필로그~
정말로 간단하게 리스트의 종류와 특징에 대해서 알아봤다.
오늘을 시작으로 리스트종류 마다 하나의 코드를 만들어서 올리고, 지난 번처럼 코드에 주석으로서 설명을
하도록 하겠다. But... 오늘은 다른 바쁜일에의해... 소스코드 구현은 내일로 미루도록하겠다.