ranerraner 2020-04-19 00:42 采纳率: 0%
浏览 179
已结题

请问C++数据结构单链表处理数集交集并集为什么不能正常输出呢?代码如下谢谢各位!!!

设计要求是单链表处理交集并集,能自动对输入的重复数据进行处理。我是纯新手,求大神帮忙修改代码,希望能详细注释说明,最好帮我简化一下代码,谢谢!!!

图片说明

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


typedef struct Node
{
    char data;
    Node* next;
}SeqList;

bool IsContain(SeqList List, int x);
bool IsContain1(SeqList* List, char x);
SeqList* Intersection(SeqList* List1, SeqList* List2);
SeqList* Union(SeqList* List1, SeqList* List2);
SeqList* CreateSeqList(char n);
void Print(SeqList* List);


//判断一个元素是否包含于一个集合
bool IsContain(SeqList* List, char x)
{
    SeqList* p = List->next;
    while (p)
    {
        if (p->data == x)
            return true;
        p = p->next;
    }
    return false;
}
//用于判断一个元素是否包含于一个不用头结点表示的集合
bool IsContain1(SeqList* List, char x)
{!

    SeqList* p = List;
    while (p != NULL)
    {
        if (p->data == x)
            return true;
        p = p->next;
    }
    return false;
}
//求交集
SeqList* Intersection(SeqList* List1, SeqList* List2)
{
    SeqList* Seq, *Node, *k;
    SeqList* p = List1->next;
    Seq = (SeqList*)malloc(sizeof(SeqList));
    k = Seq;
    while (p != NULL)
    {
        if (IsContain(List2, p->data))
        {
            Node = (SeqList*)malloc(sizeof(SeqList));
            Node->data = p->data;
            k->next = Node;
            k = k->next;
        }
        p = p->next;   /*向后遍历*/
    }
    return Seq;
}
//求并集
SeqList* Union(SeqList* List1, SeqList* List2)
{
    SeqList* Seq = (SeqList*)malloc(sizeof(SeqList));
    SeqList* p = List1->next;
    SeqList* q = List2->next;
    SeqList* k = Seq;
    while (p != NULL)
    {
        SeqList* node = (SeqList*)malloc(sizeof(SeqList));
        node->data = p->data;
        k->next = node;
        k = k->next;
        p = p->next;
    }
    while (q != NULL)
    {
        if (!IsContain(List1, q->data))
        {
            SeqList* node = (SeqList*)malloc(sizeof(SeqList));
            node->data = q->data;
            k->next = node;
            k = k->next;
        }
        q = q->next;
    }
    return Seq;
}
//创建一个集合
SeqList* CreateSeqList(char n)
{
    SeqList* Seq = (SeqList*)malloc(sizeof(SeqList));
    SeqList* Head = (SeqList*)malloc(sizeof(SeqList));
    Seq->data = '\n';
    Seq->next = NULL;
    // SeqList* p,*q;
    //p = Seq;
    //q = Seq;
    printf("输入集合%c的元素:\n", n);
    char a;
    do
    {
        scanf("%c", &a);
    } while (!((a >= 'a'&& a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
    while (a != '\n')
    {
        // q = Seq;
        if (IsContain1(Seq, a))
        {
            do{
                scanf("%c", &a);
            } while (!((a >= 'a'&&a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
        }
        else
        {
            SeqList* node = (SeqList*)malloc(sizeof(SeqList));
            node->data = a;
            node->next = Seq;
            Seq = node;
            do{
                scanf("%c", &a);
            } while (!((a >= 'a'&&a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
        }
    }
    Head->next = Seq;
    return Head;
}
//输出集合
void Print(SeqList* List)
{
    SeqList* p = List->next;
    printf("(");
    while (p->next != NULL)
    {
        printf("%c", p->data);
        p = p->next;
    }
    p = p->next;
    printf("%c", p->data);
    printf(")");
    printf("\n");
}




int main()
{

    SeqList*sq1, *sq2;
    char cname1, cname2;
    printf("输入第一个集合的名字:\n");
    scanf("%c", &cname1);
    getchar();
    sq1 = CreateSeqList(cname1);
    getchar();
    printf("输入第二个集合的名字:\n");
    scanf("%c", &cname2);
    getchar();
    sq2 = CreateSeqList(cname2);
    printf("集合%c:\n", cname1);
    Print(sq1);
    printf("集合%c:\n", cname2);
    Print(sq2);

    printf("交集\n");
    Print(Intersection(sq1, sq2));
    printf("并集\n");
    Print(Union(sq1, sq2));
    return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-04-19 10:32
    关注

    多了一个感叹号

    #include <stdio.h>
    #include <stdlib.h>
    
    
    typedef struct Node
    {
        char data;
        Node* next;
    }SeqList;
    
    bool IsContain(SeqList List, int x);
    bool IsContain1(SeqList* List, char x);
    SeqList* Intersection(SeqList* List1, SeqList* List2);
    SeqList* Union(SeqList* List1, SeqList* List2);
    SeqList* CreateSeqList(char n);
    void Print(SeqList* List);
    
    
    //判断一个元素是否包含于一个集合
    bool IsContain(SeqList* List, char x)
    {
        SeqList* p = List->next;
        while (p)
        {
            if (p->data == x)
                return true;
            p = p->next;
        }
        return false;
    }
    //用于判断一个元素是否包含于一个不用头结点表示的集合
    bool IsContain1(SeqList* List, char x)
    {
        SeqList* p = List;
        while (p != NULL)
        {
            if (p->data == x)
                return true;
            p = p->next;
        }
        return false;
    }
    //求交集
    SeqList* Intersection(SeqList* List1, SeqList* List2)
    {
        SeqList* Seq, *Node, *k;
        SeqList* p = List1->next;
        Seq = (SeqList*)malloc(sizeof(SeqList));
        k = Seq;
        while (p != NULL)
        {
            if (IsContain(List2, p->data))
            {
                Node = (SeqList*)malloc(sizeof(SeqList));
                Node->data = p->data;
                k->next = Node;
                k = k->next;
            }
            p = p->next;   /*向后遍历*/
        }
        return Seq;
    }
    //求并集
    SeqList* Union(SeqList* List1, SeqList* List2)
    {
        SeqList* Seq = (SeqList*)malloc(sizeof(SeqList));
        SeqList* p = List1->next;
        SeqList* q = List2->next;
        SeqList* k = Seq;
        while (p != NULL)
        {
            SeqList* node = (SeqList*)malloc(sizeof(SeqList));
            node->data = p->data;
            k->next = node;
            k = k->next;
            p = p->next;
        }
        while (q != NULL)
        {
            if (!IsContain(List1, q->data))
            {
                SeqList* node = (SeqList*)malloc(sizeof(SeqList));
                node->data = q->data;
                k->next = node;
                k = k->next;
            }
            q = q->next;
        }
        return Seq;
    }
    //创建一个集合
    SeqList* CreateSeqList(char n)
    {
        SeqList* Seq = (SeqList*)malloc(sizeof(SeqList));
        SeqList* Head = (SeqList*)malloc(sizeof(SeqList));
        Seq->data = '\n';
        Seq->next = NULL;
        // SeqList* p,*q;
        //p = Seq;
        //q = Seq;
        printf("输入集合%c的元素:\n", n);
        char a;
        do
        {
            scanf("%c", &a);
        } while (!((a >= 'a'&& a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
        while (a != '\n')
        {
            // q = Seq;
            if (IsContain1(Seq, a))
            {
                do{
                    scanf("%c", &a);
                } while (!((a >= 'a'&&a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
            }
            else
            {
                SeqList* node = (SeqList*)malloc(sizeof(SeqList));
                node->data = a;
                node->next = Seq;
                Seq = node;
                do{
                    scanf("%c", &a);
                } while (!((a >= 'a'&&a <= 'z') || (a >= '0'&&a <= '9') || (a >= 'A'&&a <= 'Z')) && a != '\n');
            }
        }
        Head->next = Seq;
        return Head;
    }
    //输出集合
    void Print(SeqList* List)
    {
        SeqList* p = List->next;
        printf("(");
        while (p->next != NULL)
        {
            printf("%c", p->data);
            p = p->next;
        }
        p = p->next;
        printf("%c", p->data);
        printf(")");
        printf("\n");
    }
    
    
    
    
    int main()
    {
    
        SeqList*sq1, *sq2;
        char cname1, cname2;
        printf("输入第一个集合的名字:\n");
        scanf("%c", &cname1);
        getchar();
        sq1 = CreateSeqList(cname1);
        getchar();
        printf("输入第二个集合的名字:\n");
        scanf("%c", &cname2);
        getchar();
        sq2 = CreateSeqList(cname2);
        printf("集合%c:\n", cname1);
        Print(sq1);
        printf("集合%c:\n", cname2);
        Print(sq2);
    
        printf("交集\n");
        Print(Intersection(sq1, sq2));
        printf("并集\n");
        Print(Union(sq1, sq2));
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条