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);
}