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

猜你喜欢

转载自blog.csdn.net/Xenoverse/article/details/84970820