본문으로 바로가기
728x90
반응형

자료구조 - 이중 링크드 리스트

단일 링크드 리스트와 비슷하지만 이전 노드를 찾을수 있다.


1. 구조체 선언  =>  head 노드만 있어도 구현 가능

typedef struct _node{

    int value;

    struct _node *next;

    struct _node *prev;

}node, *nptr;


typedef struct _list{

    nptr head;

    nptr tail;

    int count;

}list;


2.init 선언

list *init_list()

{

    list *lptr = (list*)malloc(sizeof(list));


    lptr->head = NULL;

    lptr->tail = NULL;

    lptr->count = 0;


    return lptr;

}


3.add list

void add_list(list *lptr, int _value)

{

    node *new_node = (node*)malloc(sizeof(node));


    new_node->value = _value;

    new_node->next = NULL;

    new_node->prev = NULL;


    if(lptr->count == 0)

    {

        lptr->head = new_node;

        lptr->tail = new_node;

    }

    else

    {

        lptr->tail->next = new_node;

        new_node->prev = lptr->tail;

        lptr->tail = new_node;

    }

    lptr->count++;

}


4.delete list

void del_list(list *lptr)

{

    if(lptr->count == 0)

    {

        printf("Error : out of range\n");

    }

    else if(lptr->count == 1)

    {

        lptr->head = NULL;

        lptr->tail = NULL;

        lptr->count--;

    }

    else

    {

        nptr remove = lptr->tail->prev;


        remove->next = NULL;

        lptr->tail = remove;

        free(remove->next);

        lptr->count--;

    }

}


5.print list  => prev를 이용하면 역순으로 출력하는 것도 가능

void print_list(list *lptr)

{

    nptr tmp = lptr->head;


    if(tmp != NULL)

    {

        printf("value : ");

        while(tmp != NULL)

        {

            printf("%d ",tmp->value);

            tmp = tmp->next;

        }

        printf("\ncount value : %d\n",lptr->count);

    }

}


반응형