m0_59477426 2021-06-19 16:43 采纳率: 100%
浏览 32
已采纳

集合的交并操作求帮忙

#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef int Status;
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;

LinkList InitList()
{//建立链表
	LinkList L, p,q;
	int d;
	L = (LinkList)malloc(sizeof(LNode));
	p = L;
	scanf("%d", &d);
	while (d != 0)
	{
	    p=p->next=(LinkList)malloc(sizeof(LNode));
		p->data = d;
		scanf("%d", &d);
	}
	p->next=NULL;
	q=L;
	L=L->next;
	free(q);
	return L;
}

LinkList Intersection(LinkList a, LinkList b)
{//求交集
	LinkList LA, LB,q;
	LA =(LinkList)malloc(sizeof(LNode));
	LB = LA;
	while (a!=NULL)
	{
	    q=b;
		while (q!=NULL)
		{
			if (q->data == a->data)
			{
				LB=LB->next=(LinkList)malloc(sizeof(LNode));
				LB->data = a->data;
				break;
			}
			q = q->next;
		}
		a = a->next;
	}
	LB->next=NULL;
	LinkList p;
	p = LA;
	LA = LA->next;
	free(p);
	return LA;
}

LinkList Unionset(LinkList a, LinkList b)
{//求并集
	LinkList L,q;
	L=b;
	while (a!=NULL)
	{
		while (b)
		{
		    q=b;
			if(a->data==b->data)
				break;
			b=b->next;
		}
		if(b==NULL)
        {
            q=q->next=(LinkList)malloc(sizeof(LNode));
            q->data=a->data;
            q->next=NULL;
        }
        b=L;
		a=a->next;
	}
	return L;
}

Status traverselist(LinkList a)
{//遍历链表
    while(a!=NULL)
    {
        printf("%3d",a->data);
        a=a->next;
    }
    return OK;
}

int main()
{
	LinkList A,B,INT,UNION;
	printf("请输入集合A的值(输入0结束):");
	A = InitList();
	printf("请输入集合B的值(输入0结束):");
    B = InitList();
	INT=Intersection(A,B);
    printf("\n所求交集为:");
	traverselist(INT);
	UNION=Unionset(A,B);
	printf("\n所求并集为:");
	traverselist(UNION);
	return 0;
}

求问怎么把以0结尾改成以#结尾,而且怎么改成也可以输入字母的程序,求代码

  • 写回答

2条回答 默认 最新

  • 关注
    typedef struct LNode
    {
    	int data;
    	struct LNode *next;
    }LNode,*LinkList;
    
    //改为char类型就可以了
    typedef struct LNode
    {
    	char data;
    	struct LNode *next;
    }LNode,*LinkList;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?