invaded123 2021-09-25 22:03 采纳率: 50%
浏览 221

C语言链表求交集并集差集!!

希望大家帮我看看,用链表写出了什么错啊。崩溃了
这里是代码


```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node//创建 
{
    int data;
    struct Node *next;
}LNode,*Listnode;
int length=0;
 
void InitLNode(LNode* head,int len) //输入 
{
 
    int i;
    LNode *news;
    LNode *node;
    head->next=news;
    node = head;
 
    for(i=0;i<len;i++)
    {
        news = (LNode*)malloc(sizeof(LNode));
        scanf("%d",&news->data);
        news->next = NULL;
        node->next = news;
        node = news;
    }
}
 
void Display(LNode *head)//输出 
{
    if(length!=0)
    {
        LNode *node;
        node=head;
        while(node->next!=NULL)
        {
            node = node->next;
            printf("%d ",node->data);
        }
    }
 
}
LNode* InterSet(LNode *p1,LNode *p2,LNode *C)//求交集 
{
        LNode *node1 = p1;
        LNode *node2 = p2;
        LNode *node3 = C;
        LNode *news3;
        C = news3;
 
        while(node1->next!=NULL)
        {
            node1=node1->next;
            while(node2->next!=NULL)
            {
                node2=node2->next;
                if(node1->data == node2->data)
                    {
                       news3 = (LNode*)malloc(sizeof(LNode));
                       length++;
                       news3->data  = node1->data;
                       news3->next = NULL;
                       node3->next = news3;
                       node3=news3;
                    }
            }
            node2 = p2;
        }
      node3 = C;
      return C;
}

LNode* AddSet(LNode *p1,LNode *p2,LNode *D)//求并集 
{
    LNode *node1 = p1;
    LNode *node2 = p2;
    LNode *node3 = D;
    LNode *news3;
    LNode *news4;
    D = news3;
 
    while(node1->next!=NULL)
    {
        node1=node1->next;
        while(node2->next!=NULL)
        {
            node2=node2->next;
            if(node1->data == node2->data)
                {
                    news3 = (LNode*)malloc(sizeof(LNode));
                    length++;
                    news3->data  = node1->data;
                    news3->next = NULL;
                    node3->next = news3;
                    node3=news3;
                }
            else 
            {
                news3 = (LNode*)malloc(sizeof(LNode));
                news4 = (LNode*)malloc(sizeof(LNode));
                length= length + 2;
                news3->data  = node1->data;
                news4->data  = node2->data;
                news3->next = news4;
                news4->next = news3;
                news3->next = NULL;
                news3 = node3;
            }
        }
        node2 = p2;
        }
    node3 = D;
    return D;
}

LNode* DifSet(LNode *p1,LNode *p2,LNode *E)//求差集 
{
    LNode *node1 = p1;
    LNode *node2 = p2;
    LNode *node3 = E;
    LNode *news3;
    LNode *news4;
    E = news3;
    while(node1->next!=NULL)
    {
        node1=node1->next;
        while(node2->next!=NULL)
        {
            node2=node2->next;
            if(node1->data != node2->data)
                {
                news3 = (LNode*)malloc(sizeof(LNode));
                news4 = (LNode*)malloc(sizeof(LNode));
                length= length + 2;
                news3->data  = node1->data;
                news4->data  = node2->data;
                news3->next = news4;
                news4->next = news3;
                news3->next = NULL;
                news3 = node3;
                }
            else    break;
        }
        node2 = p2;
    }
   node3 = E;
   return E;
    
}

int main()
{
    LNode *a;
    LNode *b;
    LNode *c;
    LNode *d;
    LNode *e;
    int length1,length2 ;
    a = (LNode*)malloc(sizeof(LNode));
    b = (LNode*)malloc(sizeof(LNode));
    c = (LNode*)malloc(sizeof(LNode));
    d = (LNode*)malloc(sizeof(LNode));
    e = (LNode*)malloc(sizeof(LNode));
     printf("请输入元素个数:");
    scanf("%d",&length1);
    printf("请输入元素");
    InitLNode(a,length1);
      printf("请输入元素个数:");
    scanf("%d",&length2);
    printf("请输入元素");
    InitLNode(b,length2);

    InterSet(a,b,c);
    printf("输出交集元素:");
    Display(c);
    printf("\n");
    
    AddSet(a,b,d);
    printf("输出并集元素:");
    Display(d);
    printf("\n");
    
    DifSet(c,d,e);
    printf("输出差集元素:");
    Display(e);
    printf("\n");
    
    return 0;
}

```

  • 写回答

1条回答 默认 最新

  • ????27282 网络安全领域优质创作者 2021-09-25 22:10
    关注

    img

    差集写成死循环了..

    水平有限....

    评论

报告相同问题?

问题事件

  • 创建了问题 9月25日

悬赏问题

  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)
  • ¥66 比特币地址如何生成taproot地址
  • ¥20 数学建模数学建模需要