자료구조 - 이중 링크드 리스트
단일 링크드 리스트와 비슷하지만 이전 노드를 찾을수 있다.
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);
}
}
'Computer Science > Data Structure' 카테고리의 다른 글
자료구조 - 큐 (0) | 2018.03.21 |
---|---|
자료구조 - 스택 (0) | 2018.03.21 |
자료구조 - 원형 이중 링크드 리스트 (1) | 2018.03.20 |
자료구조 - 원형 링크드 리스트 (0) | 2018.03.13 |
자료구조 - 단순 연결 리스트 (0) | 2018.03.12 |