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

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

이중 링크드 리스트에서 tail 노드와 head 노드만 이어주면 원형 이중 링크드 리스트 구현 가능

1. 노드 선언
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;
        new_node->next = new_node;
        new_node->prev = new_node;
    }
    else
    {
        lptr->tail->next = new_node;
        new_node->prev = lptr->tail;
        new_node->next = lptr->head;
        lptr->tail = new_node;
    }
    lptr->count++;
}

4. del list
void del_list(list *lptr)
{
    nptr remove;

    if(lptr->count == 0)
    {
        printf("Error : out of range\n");
    }
    else if(lptr->count == 1)
    {
        remove = lptr->head;
        lptr->head = NULL;
        lptr->tail = NULL;
        free(remove);
        lptr->count--;
    }
    else
    {
        remove = lptr->tail;

        remove->prev->next = lptr->head;
        lptr->tail = remove->prev;
        free(remove);
        lptr->count--;
    }
}

5. print list

void print_list(list *lptr)

{

    nptr tmp = lptr->head;


    int _count = 0;


    if(tmp != NULL)

    {

        printf("value : ");

        while(tmp != NULL && _count != lptr->count)

        {

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

            tmp = tmp->next;

            _count++;

        }

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

    }

}


반응형

'Computer Science > Data Structure' 카테고리의 다른 글

자료구조 - 큐  (0) 2018.03.21
자료구조 - 스택  (0) 2018.03.21
자료구조 - 이중 링크드 리스트  (0) 2018.03.14
자료구조 - 원형 링크드 리스트  (0) 2018.03.13
자료구조 - 단순 연결 리스트  (0) 2018.03.12