HyeLog

[자료구조] 이중 연결 리스트 (Doubly Linked List) 본문

CS

[자료구조] 이중 연결 리스트 (Doubly Linked List)

shj718 2021. 10. 18. 20:44

<큐가 오름차순으로 정렬되게 삽입하는 코드>

void insert(int data) {

	NodePointer i, element;

	i = head->next;

	while(i->data <= data && i != tail)

		i = i->next;

	element = (NodePointer) malloc (sizeof(Node));

	element->data = data;

	i->prev->next = element;

	element->prev = i->prev;

	i->prev = element;

	element->next = i;

}

<참고할 만한 링크>

 

https://opentutorials.org/module/1335/8940

 

Doubly linked list (이중 연결 리스트) - Data Structure (자료구조)

소개 doubly linked list의 핵심은 노드와 노드가 서로 연결되어 있다는 점입니다. 아래 그림을 보면 단순 연결 리스트(linked list)와는 다르게 노드가 이전 노드(previous)와 다음 노드(next)로 구성되어 있

opentutorials.org

https://ndb796.tistory.com/75

 

[ 자료구조 ] 4. 이중 연결 리스트(Double Linked List)

이번 시간에는 이중 연결 리스트(Double Linked List)에 대해서 알아보도록 하겠습니다. 이중 연결 리스트는 말 그대로 모든 노드가 이전 노드와 다음 노드에 대한 정보를 모두 저장하고 있는 리스트

ndb796.tistory.com

https://jow1025.tistory.com/217

 

헤드노드를 이용한 이중연결리스트의 구현

헤드노드를 이용한 간단한 이중연결리스트의 구현프로그램입니다. 헤드노드는 구현의 편의를 위해 사용하는 것으로, 헤드노드를 이용해 이중연결리스트를 원형리스트와 결합된 형태로 사용할

jow1025.tistory.com

https://hubbleconstant.tistory.com/39

 

이중 연결 리스트(Double linked list), 이중 원형 연결 리스트 예제

오늘은 이중 연결 리스트(Double linked list)에 대해서 알아보려고 합니다. 이중 연결 리스트는 prev, next라는 2개의 방향을 가리키는 포인터를 가지고 있는 리스트입니다. prev라는 이전 노드를 가리키

hubbleconstant.tistory.com

https://ehrn35.tistory.com/9

 

2.2.5 이중 연결 리스트 (Double Linked List)

2.2.5 이중연결리스트 2.2.5.1 이중 연결 리스트의 개념        -> 하나의 노드가 선행 노드와 다음 노드에 대한 두 개의 링크를 가지는 연결 리스트이다.         -> 이중 연결 리스트는 헤드

ehrn35.tistory.com

https://gurumee92.tistory.com/126

 

이중 연결 리스트 구현

Contents 시작하며... 이중 연결 리스트 정의 이중 연결 리스트의 핵심 원리 리스트 ADT 확인 리스트의 공통 main 함수 이중 연결 리스트 구현 이중 연결 리스트 구조체 정의 리스트 생성과 파괴 리스

gurumee92.tistory.com

 

<삽입 코드(push_back)>

void Insert_Tail(Node *New_Node, int data)
{
    New_Node = CreateNode();
 
    if(New_Node == NULL) return;
 
    // 새로운 노드 연결.
    New_Node->prev = Head->prev;
    New_Node->next = Head;
    New_Node->prev->next = New_Node;
    New_Node->next->prev = New_Node;
 
    // data 삽입.
    New_Node->data = data;
}

 

<큐가 비었는지 확인하는 코드>

uint8 Check_Node_Empty()
{
    if(Head->prev == Head && Head->next == Head)
        return FAIL;
    else 
        return SUCCESS;    
}

 

<삭제 코드(pop_front)>

uint8 Remove_Head()
{
    Node *Target = Head->next;
 
    // Node의 존재 여부를 확인.
    if(!Check_Node_Empty())
        return FAIL;
 
    Target->prev->next = Target->next;
    Target->next->prev = Target->prev;
    free(Target);
 
    return SUCCESS;    
}