C语言利用链表实现求两个集合的差集

Description

线性表A和B分别表示两个集合A和B(同集合中的元素值各不相同、无序),用带头结点的单链表存储。

另辟空间构成一个线性表C,编写算法求C=A和B的差集。 

结点结构:

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

要求:

(1)编写函数,实现输入数据建立集合单链表。

(2)编写函数,实现链表中元素的输出。

(3)如果需要复制链表,编写函数实现。

(4)编写函数,实现求集合A和B的差集C,保存到新的单链表。

调用上述函数,依次输出C中的元素。

Input

 第1行输入A的元素个数

第2行输入A中的元素,以空格分隔

第3行输入B的元素个数

第4行输入B中的元素,以空格分隔

Output

 依次输出C中的元素,以空格分隔。

(最后一个元素后面也有一个空格)

Sample Input

4
2 8 5 6
6
10 6 9 2 7 3

Sample Output

8 5 
#include<stdio.h>
#define  MAXSIZE 100 // 线性表的最大长度

typedef int ElemType;//ELEMENT定义为int类型

//定义结构体
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}SqList;

void DifferentSet(SqList *A,SqList *B,SqList *C){
    int i=0;

    int j = 0;
    for (i=0;i<A->length;i++) //遍历A线性表
    {
        int k = 0;
        for(j=0;j<B->length;j++)//遍历B线性表
        {
            if(B->data[j] == A->data[i])//若一样则k++
            {
                k++;
            }
        }
        if(k==0)//k==0,说明B中不存在A该元素
        {

            C->data[C->length++]=A->data[i];//把A该元素,存在C线性表里面,先把Length+1,再存入Data
        }

    }
}

/*
输出展示函数
*/
void Display(SqList *L){
    	int i;
    	for(i=0;i<L->length;i++)
        printf("%d ",L->data[i]);
}

void main()
{
	int i,j;
 	int list1_len;
    int list2_len;
    /*输入A线性表的长度和各个元素*/
    SqList *A = (SqList*)malloc(sizeof(SqList));
    A->length=0;
    scanf("%d",&list1_len);
    for(i=0;i<list1_len;i++)
    {
   		scanf("%d",&A->data[i]);
   		A->length++;
    }
    /*输入B线性表的长度和各个元素*/
    SqList *B = (SqList*)malloc(sizeof(SqList));
    B->length=0;
    scanf("%d",&list2_len);
    for(i=0;i<list2_len;i++)
    {
   		scanf("%d",&B->data[i]);
   		B->length++;
    }

    SqList *C = (SqList*)malloc(sizeof(SqList));
    C->length=0;

    /*调用求差集的函数*/
	DifferentSet(A,B,C);

	/*输出展示求得的C线性表*/
    Display(C);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章