본문 바로가기

Hello World!!/Data Structure

이중 연결 리스트 (Doubly Linked List)

연결 리스트(Linked List)에 대한 설명은 이미 포스팅 되어 있으므로 자세한 설명은 생략하겠다.


이중 연결 리스트는 아래 그림을 보면 이해하기 쉬울 것이다.


<그림 1> 연결 리스트


<그림 2> 이중 연결 리스트


이중 연결 리스트(Doubly Linked List)연결 리스트의 탐색 기능을 개선한 자료구조이다.

연결 리스트는 노드를 찾으려면 HEAD에서 TAIL 방향으로만 탐색을 할 수 있는데 반해

이중 연결 리스트양방향으로 탐색이 가능하다.


구조체로 표현하면 아래와 같다.

typedef struct tagNode {

int Data;

Struct tagNode* PrevNode;

Struct tagNode* NextNode;

} Node;

간단히 설명하면 PrevNode자신 Node 앞 Node를 가리키고 NextNode자신 Node의 뒤 Node를 가리키는 것이다.


이중 연결 리스트의 주요 연산은 연결 리스트와 동일하다.


  • 노드 생성

Node* createNode(int Data) {

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

newNode->Data = Data;

newNode->PrevNode = NULL;

newNode->NextNode = NULL;

return newNode;

}


  • 노드 소멸

 - 노드 소멸은 연결 리스트와 동일하다.


  • 노드 추가

void appendNode(Node** Head, Node* newNode) {

if( (*Head) == NULL) {

*Head = NewNode;

} else {

Node * Tail = (*Head);

while(Tail->NextNode != NULL) {

Tail = Tail->NextNode;

}

Tail->NextNode = newNode;

newNode->PrevNode = Tail;

}

}


이중 연결 리스트도 연결 리스트와 마찬가지로 노트 탐색, 삽입, 삭제는 생략하겠다.

'Hello World!! > Data Structure' 카테고리의 다른 글

큐 (Queue)  (0) 2013.08.07
스택 (Stack)  (0) 2013.08.06
환형 연결 리스트 (Circular Linked List)  (0) 2013.08.03
연결 리스트 (Linked List)  (0) 2013.08.02