# 간단한 링크드 리스트 자료형 예제
typedef struct {
int index;
char name[10];
char sex;
int age;
char mail[50];
char phone[15];
char address[128];
}USER_INFO;
typedef struct list_node *list_ptr;
typedef struct list_node {
USER_INFO user_info;
list_ptr next;
}LIST_NODE;
list_ptr first=NULL;
unsigned long list_cnt=0;
list_ptr find_list_ptr(int node)
{
unsigned long i;
list_ptr tmp=first;
if( node > list_cnt )
node = list_cnt;
if( tmp == NULL )
return NULL;
for( i=1 ; i<node ; i++ )
{
tmp = tmp->next;
}
return tmp;
}
// add list to end of list
void add_list()
{
list_ptr tmp, end;
tmp = (list_ptr)malloc( sizeof(LIST_NODE) );
tmp->next = NULL;
if( list_cnt == 0 )
{
first = tmp;
}
else
{
end = find_list_ptr( list_cnt );
end->next = tmp;
}
list_cnt++;
}
void insert_list(unsigned long node)
{
list_ptr tmp, node_ptr,node_next_ptr ;
tmp = (list_ptr)malloc( sizeof(LIST_NODE) );
tmp->next=NULL;
if( node >= list_cnt)
{
add_list();
return;
}
node_ptr = find_list_ptr(node);
node_next_ptr = node_ptr->next;
node_ptr->next = tmp;
tmp->next = node_next_ptr;
list_cnt++;
}
void Del_list()
{
unsigned long i;
list_ptr tmp = first;
list_ptr tmp_next;
for( i=0 ; i<list_cnt; i++ )
{
if( tmp->next != NULL)
{
tmp_next = tmp->next;
free(tmp);
tmp = tmp_next;
}
else
{
if( tmp != NULL )
free(tmp);
}
}
list_cnt = 0;
}