C语言运行中出现“ld returned 1 exit status”无法解决
#include
#include
typedef int ADT;
typedef struct N
{
ADT data;
struct N * next;
}Node;
typedef struct
{
Nodehead,tail;
unsigned size;
} List;
Nodemake_node(ADT d)
{
Nodenp=malloc(sizeof(Node));
if(!np)
return (void*)0;
np->data=d;
np->next=(void*)0;
return np;
}
Listinit_list(Listlp)
{
lp->head=lp->tail=(void*)0;
lp->size=0;
return lp;
}
Listclear_list(Listlp)
{
while(lp->head)
{
Nodedel=lp->head;
lp->head=del->next;
free(del);
}
lp->tail=(void)0;
lp->size=0;
return lp;
}
void destroy_list(Listlp)
{
clear_list(lp);
}
Listpush_front_list(Listlp,ADT d)
{
Nodenew_node=make_node(d);
if(!new_node)
return(void*)0;
new_node->next=lp->head;
lp->head=new_node;
if(lp->tail==(void*)0)
lp->tail=lp->head;
++lp->size;
return lp;
}
Listpush_back_list(Listlp,ADT d)
{
Nodenew_node=make_node(d);
if(!new_node)
return(void)0;
if(lp->tail)
lp->tail->next=new_node;
else
lp->head=new_node;
lp->tail=new_node;
++lp->size;
}
Listpop_front_list(Listlp)
{
if(lp->size==0)
return(void*)0;
Nodedel=lp->head;
lp->head=del->next;
free(del);
--lp->size;
if(lp->size==0)
lp->tail=(void)0;
return lp;
}
Listpop_back_list_bad(Listlp)
{
if(lp->size==0)
return (void*)0;
Nodedel=lp->head;
Nodenew_tail=lp->tail;
if(lp->head==lp->head)
lp->tail=lp->head=(void*)0;
else
{
while(new_tail->next!=lp->tail)
new_tail=new_tail->next;
new_tail->next=(void*)0;
lp->tail=new_tail;
}
free(del);
--lp->size;
return lp;
}
Nodefind_in_list(const Listlp,ADT d)
{
Node* cur=lp->head;
while(cur&&cur->data!=d)
cur=cur->next;
return cur;
}
Listinsert_after_list(Listlp,ADT d,Nodepos)
{
if(pos==(void)0||lp->size==0)
return push_front_list(lp,d);
if(pos==lp->tail)
return push_back_list(lp,d);
Nodenew_node=make_node(d);
if(!new_node)
return(void)0;
new_node->next=pos->next;
pos->next=new_node;
++lp->size;
return lp;
}
Listinsert_list1(Listlp,ADT d,Nodepos)
{
if(pos==(void)0||lp->size==0)
return push_back_list(lp,d);
if(pos==lp->head)
return push_back_list(lp,d);
Nodenew_node=make_node(d);
if(!new_node)
return(void)0;
Nodepre=lp->head;
while(pre&&pre->next!=pos)
pre=pre->next;
if(pre)
{
new_node->next=pos;
pre->next=new_node;
}
return lp;
}
Listinsert_list2(Listlp,ADT d,Nodepos)
{
if(pos==(void*)0||lp->size==0)
return push_back_list(lp,d);
if(pos==lp->head)
return push_front_list(lp,d);
Nodenew_node=make_node(pos->data);//注意
if(!new_node)
return(void) 0;
pos->data=d;
new_node->next=pos->next;
pos->next=new_node;
if(pos==lp->tail)
lp->tail=new_node;
return lp;
}
Listerase_after_list(Listlp,Nodepos)
{
if(pos==lp->tail||lp->size==0)
return (void)0;
if(pos==(void*)0)
return pop_front_list(lp);
Nodedel=pos->next;
pos->next=del->next;
--lp->size;
if(del==lp->tail)
lp->tail=pos;
free(del);
return lp;
}
Listerase_list1(Listlp,Nodepos)
{
if(pos==(void*)0||lp->size==0)
return(void*)0;
if(pos==lp->head)
return pop_front_list(lp);
Nodepre=lp->head;
while(pre&&pre->next!=pos)
pre=pre->next;
if(pre)
{
pre->next=pos->next;
if(pos==lp->tail)
lp->tail=pre;
--lp->size;
free(pos);
}
return lp;
}
Listerase_list2(Listlp,Nodepos)
{
if(pos==(void*)0||lp->size==0)
return (void*)0;
if(pos==lp->head)
return pop_front_list(lp);
if(pos==lp->tail)
return pop_back_list_bad(lp);
Nodedel=pos->next;
pos->data=del->data;
pos->next=del->next;
--lp->size;
if(del==lp->tail)
lp->tail=pos;
free(del);
return lp;
}
int remove_if_list(Listlp,_Bool(con)(ADT))
{
int count=0;
while (lp->size&&con(lp->head->data))
{
++count;
pop_front_list(lp);
}
if(lp->size>1)
{
Nodepre=lp->head;
while(pre->next)
{
if(con(pre->next->data))
{
Nodedel=pre->next;
pre->next=del->next;
free(del);
--lp->size;
++count;
if(pre->next==0)
lp->tail=pre;
}
else
pre=pre->next;
}
}
return count;
}
void print_list(const Listlp)
{
Node*cur=lp->head;
if(cur)
{
printf("链表存放%d个数据:%d",lp->size,cur->data);
cur=cur->next;
while(cur)
{
printf("->%d",cur->data);
cur=cur->next;
}
printf("\n");
}
else
printf("空链表\n");
}
_Bool lessl0(int n)
{
return n<10;
}
int main(void)
{
int i;
List list;
init_list(&list);
push_front_list(&list,1);
push_front_list(&list,2);
print_list(&list);
push_back_list(&list,3);
push_back_list(&list,4);
print_list(&list);
pop_front_list(&list);
pop_back_list_bad(&list);
print_list(&list);
insert_after_list(&list,5,find_in_list(&list,3));
insert_list1_list(&list,4,find_in_list(&list,5));
insert_list2_list(&list,2,find_in_list(&list,3));
print_list(&list);
erase_after_list(&list,find_in_list(&list,4));
erase_list1(&list,find_in_list(&list,3));
erase_list2(&list,find_in_list(&list,4));
print_list(&list);
remove_if_list(&list,lessl0);
print_list(&list);
destroy_list(&list);
return 0;
}
前面两行错误提示,告诉你有两个函数找不到定义