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