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 |