溟尔 2022-09-24 20:58 采纳率: 100%
浏览 46
已结题

C语言运行中出现“ld returned 1 exit status”无法解决

   C语言运行中出现“ld returned 1 exit status”无法解决
 #include<malloc.h>
    #include<stdio.h>
    typedef int ADT;
    typedef struct N
    {
        ADT data;
        struct N * next;
    }Node;
    typedef struct
    {
        Nodehead,tail;
        unsigned size;
     } List;
    Node
make_node(ADT d)
    {
        Node
np=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);
    }
    List
push_front_list(Listlp,ADT d)
{
    Node
new_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;
      Node
new_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;
  } 
  
  List
insert_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;
  }
  
  List
erase_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;
  }
  
  List
erase_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(List
lp,_Bool(con)(ADT))
    {
        int count=0;
        while (lp->size&&con(lp->head->data))
        {
            ++count;
            pop_front_list(lp);
        }
        if(lp->size>1)
        {
            Node
pre=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 List
lp)
     {
         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;
     }

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-24 22:00
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 已采纳回答 9月25日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错