C語言利用鏈表求集合的交集

Description

 假設元素依值遞增有序排列的線性表A和B分別表示兩個集合(即同一表中的元素值各不相同),現要求另闢空間構成一個線性表C,其元素爲A和B中元素的交集,且表C中的元素也依值遞增有序排列。

輸入A和B集合中的元素;

輸出A和B的交集C中的元素。

提示:存儲結構採用帶表頭結點的循環單鏈表,結點結構如下:

typedef struct Node

{

    int data;  

    struct Node *next;

}LNode,*LinkList;

要求:

(1)編寫函數按照升序序列輸入元素值,建立集合的循環單鏈表。

(2) 編寫函數實現集合的求交集算法。

(3)編寫函數依次輸出集合中的元素。

(4)編寫main(),調用上述函數完成題目要求。

Input

 輸入集合A的元素個數

按照升序依次輸入集合A的元素值

輸入集合B的元素個數

按照升序依次輸入集合B的元素值

Output

 依次輸出A和B的交集C中的元素。

Sample Input

5
10 20 30 40 50
6
5 16 20 35 40 80

Sample Output

20 40

 

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
}LNode,*LinkList;
int length_C=0;

void InitLNode(LNode* pHeader,int len){

    int i;

    LNode *pNewNode;
    LNode *pCurNode;
    pHeader->next=pNewNode;
    pCurNode = pHeader;

    for(i=0;i<len;i++)
    {
        pNewNode = (LNode*)malloc(sizeof(LNode));
        scanf("%d",&pNewNode->data);
        pNewNode->next = NULL;
        pCurNode->next = pNewNode;
        pCurNode = pNewNode;
    }
}

void Display(LNode *pHeader)
{
    if(length_C!=0)
    {
        LNode *pCurNode;
        pCurNode=pHeader;
        while(pCurNode->next!=NULL)
        {
            pCurNode = pCurNode->next;
            printf("%d ",pCurNode->data);
        }
    }

}
LNode* InterSet(LNode *p1,LNode *p2,LNode *C)
{
        LNode *pCurNode1 = p1;
        LNode *pCurNode2 = p2;
        LNode *pCurNode3 = C;
        LNode *pNewNode3;
        C->next = pNewNode3;

        while(pCurNode1->next!=NULL)
        {
            pCurNode1=pCurNode1->next;
            while(pCurNode2->next!=NULL)
            {
                  pCurNode2=pCurNode2->next;
                if(pCurNode1->data == pCurNode2->data)
                    {
                       pNewNode3 = (LNode*)malloc(sizeof(LNode));
                       length_C++;
                       pNewNode3->data  = pCurNode1->data;
                       pNewNode3->next = NULL;
                       pCurNode3->next = pNewNode3;
                       pCurNode3=pNewNode3;

                    }
            }
            pCurNode2 = p2;
        }
      pCurNode3 = C;

      return C;
}
int main()
{
    LNode *A;
    LNode *B;
    LNode *C;

    int length_A,length_B ;
    A = (LNode*)malloc(sizeof(LNode));
    B = (LNode*)malloc(sizeof(LNode));
    C = (LNode*)malloc(sizeof(LNode));

    scanf("%d",&length_A);
    InitLNode(A,length_A);

    scanf("%d",&length_B);
    InitLNode(B,length_B);

    InterSet(A,B,C);

    Display(C);
    return 0;
}

 

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