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

 

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