酒煮青梅392 2023-07-22 15:48 采纳率: 65.2%
浏览 28
已结题

单链表求A-B和AUB出错


#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
}LNode,*LinkList;

LinkList Creat_LinkList()
{
    LinkList H;
    H=(LinkList)malloc(sizeof(LNode));
    if(H)
    H->next=NULL;
    return H;
}

void Destroy_(LinkList H)
{
    LinkList p,q;
    p=H;
    while(p)
    {
        q=p;
        p=p->next;
        free(q);
    }

    H=NULL;
}

int Length_LinkList(LinkList H)
{
    LinkList p=H;
    int count =-1;
    while(p)
    {
        p=p->next;
        count++;
    }

    return count;

}


LinkList Locate_LinkList(LinkList H,int i)
{
    LinkList p=H;
    int j;
    j=0;
    while(p&&j<i)
    {
        p=p->next;
        j++;
    }

    if(!p||i!=j)
    {
        printf("参数i错误或者单链表不存在:");
        return 0;
    }

    return p;

}

LinkList Locate_LinkList_valube(LinkList H,int x)
{
    LinkList p=H->next;
    while(p&&p->data!=x)
    {
        p=p->next;
    }

    return p;

}

int insert_LinkList(LinkList H,int i,int x)
{
    LinkList p,q;
    p=Locate_LinkList (H,i-1);
    if(!p)
    {
        printf("单链表不存在:");
        return 0;
    }

    q=(LinkList)malloc(sizeof(LNode));
    if(!q)
    {
        printf("开辟空间失败:");
        return 0;
    }

    p->data=x;
    q->next=p->next;
    p->next=q;

    return 1;
}

int Del_LinkList(LinkList H,int i)
{
    if(!H||H->next==NULL)
    {
        printf("单链表不存在:");
        return 0;
    }

    LinkList p,q;

    p=Locate_LinkList (H,i-1);

    if(!p||p->next==NULL)
    {
        printf("单链表不存在:");
        return 0;
    }

    q=p->next;
    p->next=q->next;
    free(q);
    return 1;

}



void reverse_LinkList(LinkList H)
{
    LinkList p,q;
    p=H->next;
    H->next=NULL;

    while(p)
    {
        q=p;
        p=p->next;
        q->next=H->next;
        H->next=q;

    }
}


void ajiaob(LinkList A,LinkList B)
{
    int x;
    LinkList p,pre;
    pre=A,p=pre->next;
    while(p)
    {
        x=p->data;
        if(Locate_LinkList_valube(B,x))
        {
            pre->next=p->next;
            free(p);
            p=pre->next;
        }

        else
        {
            pre=p;
            p=p->next;
        }
    }
}


void abingb(LinkList A,LinkList B)
{
    int x;
    LinkList p;
    p=B->next;

    while(p)
    {
        x=p->data;
        if(!Locate_LinkList_valube(A,x))
        {
            insert_LinkList(A,1,x);
        }

        else
        {
            p=p->next;
        }
    }

}
int main()
{
    int i,j;
    int a[8]={1,2,3,4,5,6,7,8},b[6]={1,3,5,10,16,19};
    LinkList A,B;
    A=Creat_LinkList();
    B=Creat_LinkList();

    for(i=0;i<8;i++)
    {
        insert_LinkList(A,i+1,a[i]);
    }

    for(j=0;j<6;j++)
    {
        insert_LinkList(B,j+1,b[j]);
    }

    LinkList A_B,AUB;
    A_B=Creat_LinkList();
    AUB=Creat_LinkList();
    int a_b,aub;

    a_b=Length_LinkList(A);
    aub=Length_LinkList(B);

    for(i=0;i<a_b;i++)
    {
        insert_LinkList(A_B,i+1,a[i]);
    }
    ajiaob(A_B,B);


    for(j=0;i<aub;j++)
    {
        insert_LinkList(A_B,j+1,b[j]);
    }
    abingb(AUB,B);

    printf("A_B:");

    for(i=0;i<a_b;i++)
    {
        LinkList p=A_B->next;
        for(j=0;j<=i;j++)
        {
            p=p->next;
        }

        printf("%d ",p->data);
    }

    for(i=0;i<aub;i++)
    {
        LinkList pre=AUB->next,p;
        p=pre->next;
        for(j=0;j<=i;j++)
        {
            pre=p;
            p=p->next;
        }

        printf("%d ",p->data);

    }//输出链表中元素的功能

    return 0;

}

这是一个用单链表实现集合A-B,AUB功能的代码,不知为何会运行后直接无任何输出就结束了

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-07-22 23:00
    关注

    修改如下,改动处见注释 “修改” ,供参考:

    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct node
    {
        int data;
        struct node *next;
    }LNode,*LinkList;
     
    LinkList Creat_LinkList()
    {
        LinkList H;
        H=(LinkList)malloc(sizeof(LNode));
        if(H)
            H->next=NULL;
        return H;
    }
     
    void Destroy_(LinkList H)
    {
        LinkList p,q;
        p=H;
        while(p)
        {
            q=p;
            p=p->next;
            free(q);
        }
     
        H=NULL;
    }
     
    int Length_LinkList(LinkList H)
    {
        LinkList p = H;
        int count = -1;
        while(p)
        {
            p=p->next;
            count++;
        }
        return count;
    }
    
    LinkList Locate_LinkList(LinkList H,int i)
    {
        LinkList p=H;
        int j;
        j=0;
        while(p&&j<i)
        {
            p=p->next;
            j++;
        }
     
        if(!p||i!=j)
        {
            printf("参数i错误或者单链表不存在:");
            return 0;
        }
        return p;
    }
     
    LinkList Locate_LinkList_valube(LinkList H,int x)
    {
        LinkList p=H->next;
        while(p&&p->data!=x)
        {
            p=p->next;
        }
     
        return p;
     
    }
     
    int insert_LinkList(LinkList H,int i,int x)
    {
        LinkList p,q;
        p=Locate_LinkList (H,i-1);
        if(!p)
        {
            printf("单链表不存在:");
            return 0;
        }
     
        q=(LinkList)malloc(sizeof(LNode));
        if(!q)
        {
            printf("开辟空间失败:");
            return 0;
        }
     
        q->data=x;   // p->data=x; 修改
        q->next=p->next;
        p->next=q;
     
        return 1;
    }
     
    int Del_LinkList(LinkList H,int i)
    {
        if(!H||H->next==NULL)
        {
            printf("单链表不存在:");
            return 0;
        }
     
        LinkList p,q;
     
        p=Locate_LinkList (H,i-1);
     
        if(!p||p->next==NULL)
        {
            printf("单链表不存在:");
            return 0;
        }
     
        q=p->next;
        p->next=q->next;
        free(q);
        return 1;
    }
    
    void reverse_LinkList(LinkList H)
    {
        LinkList p,q;
        p=H->next;
        H->next=NULL;
     
        while(p)
        {
            q=p;
            p=p->next;
            q->next=H->next;
            H->next=q;
        }
    }
    
    void ajiaob(LinkList A,LinkList B)
    {
        int x;
        LinkList p,pre;
        pre=A,p=pre->next;
        while(p)
        {
            x=p->data;
            if(Locate_LinkList_valube(B,x))
            {
                pre->next=p->next;
                free(p);
                p=pre->next;
            }
            else
            {
                pre=p;
                p=p->next;
            }
        }
    }
    
    void abingb(LinkList A,LinkList B)
    {
        int x;
        LinkList p;
        p=B->next;
     
        while(p)
        {
            x=p->data;
            if(!Locate_LinkList_valube(A,x))
            {
                insert_LinkList(A,1,x);
            }
            //else 修改
            //{    修改
            p=p->next;
            //}    修改
        }
    }
    int main()
    {
        int i,j;
        int a[8]={1,2,3,4,5,6,7,8},b[6]={1,3,5,10,16,19};
        LinkList A,B;
        A=Creat_LinkList();
        B=Creat_LinkList();
     
        for(i=0;i<8;i++)
        {
            insert_LinkList(A,i+1,a[i]);
        }
     
        for(j=0;j<6;j++)
        {
            insert_LinkList(B,j+1,b[j]);
        }
     
        LinkList A_B,AUB;
        A_B=Creat_LinkList();
        AUB=Creat_LinkList();
        int a_b,aub;
     
        a_b=Length_LinkList(A);
        aub=Length_LinkList(B);
     
        for(i=0;i<a_b;i++)
        {
            insert_LinkList(A_B,i+1,a[i]);
        }
        ajiaob(A_B,B);
     
    
        for(j=0;j<aub;j++) // 修改
        //for(j=0;i<aub;j++)
        {
            insert_LinkList(AUB,j+1,b[j]); // 修改
            //insert_LinkList(A_B,j+1,b[j]);
        }
        abingb(AUB,A);  //abingb(AUB,B); // 修改
    
        printf("A_B:");
        a_b=Length_LinkList(A_B);// 修改
        for(i=0;i<a_b;i++)
        {
            LinkList p=A_B; //->next;修改
            for(j=0;j<=i;j++)
            {
                p=p->next;
            }
    
            printf("%d ",p->data);
        }
        printf("\n");
    
        printf("AUB:");
        aub=Length_LinkList(AUB); // 修改
        for(i=0;i<aub;i++)
        {
            LinkList p=AUB; //pre=AUB->next, 修改
                            //p=pre->next;   修改
            for(j=0;j<=i;j++)
            {
                            //pre=p;         修改
                p=p->next;
            }
     
            printf("%d ",p->data);
     
        }//输出链表中元素的功能
    
        return 0;
     
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 7月22日

悬赏问题

  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim
  • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
  • ¥15 设计简单目录管理系统,要满足以下内容