자료 구조

Linked List (연결 리스트)

elluma 2012. 5. 11. 17:03

링크드 리스트는 리스트 구현 기법 중 가장 간단한 방법으로 꼽히는 자료구조


리스트 내의 각 요소는 '노드' (우리말로 '마디'라는 뜻)


링크드 리스트는 '노드를 연결해서 만드는 리스트'




링크드 리스트의 노드

typedef struct tagNode

{

int  Data;                            //데이터 필드

struct tagNode* NextNode;    //다음 노드를 가리키는 포인터

} Node;


Node MyNode;


링크드 리스트의 주요연산

  • 노드 생성/소멸
  • 노드 추가
  • 노드 탐색
  • 노드 삭제
  • 노드 삽입


C언어로 작성된 프로그램의 세가지 메모리영역

정적메모리 (Static Memory) : 프로그램 실행시 프로그램에 사용될 전역변수/정적변수를 메모리에 할당한 후 프로그램 종료시 해제하는 영역

자동메모리 (Automatic Memory) : 스택구조. 코드 블록에서 선언된 변수를 선언 당시에 메모리에 저장했다가 코드 블록 끝에서 자동으로 모두 제거

자유저장소 (Free Store) : 프로그래머가 직접 메모리를 관리하는 메모리 영역


자유저장소에 메모리를 할당려면 malloc() 함수가 필요하다.

void* malloc (size_t size);    //size_t 는 unsigned int의 별칭으로 선언되어 있다.


Node* NewNode = (Node *)malloc(sizeof(Node));


생성한 노드를 소멸은 free() 함수를 사용한다.

void free (void *memblock);


free(NewNode);




소스코드





링크드 리스트의 단점

  • 각 노드마다 다음 노드를 가리키는 포인터로 인한 4byte의 메모리가 추가적으로 필요
  • 노드 탐색을 하는데 비용이 크고 속도가 느리다.


링크드 리스트의 장점

  • 노드의 추가/삽입/삭제가 쉽고 빠르다. (배열과 비교하여)

"링크드 리스트는 레코드를 순차적으로 다루는데 적합하다."