2.25√ 另辟空间构成一个线性表C,其元素为A和B中元素的交集

注意❗

  • 在循环之前为顺序表开辟结点空间;
  • 循环结束之后修改顺序表的长度。
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define maxsize 10

typedef int ElemType;
typedef int status;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;

//*****************************************
typedef struct
{
    ElemType *data;
    int length;
}SqList;

void print(SqList A)
{
    for(int i=0; i<A.length; i++)
        printf("%d\n", A.data[i]);
}
//****************************************

LinkList creat()
{//使用尾插法建立带头结点的单链表;
    LinkList L;
    L = (LinkList)malloc(sizeof(LNode));    //开辟头结点空间
    if(!L)   printf("memory malloc error!\n");
    LinkList p = L;
    ElemType a;
    int len;
    
    printf("请输入待建表的表长:");
    scanf("%d", &len);
    
    if(len>0)
    {
        for(int i=0; i<len; i++)
        {   
            printf("请输入第%d个元素的值:", i+1);
            scanf("%d", &a);
            p->next = (LinkList)malloc(sizeof(LNode));
            p->next->data = a;
            p = p->next;
        }
    }
    
    p->next = NULL;
    
    return L;
    
}

SqList merge(LinkList A, LinkList B)
{
    SqList C;  
    C.data = NULL;  C.length = 0;   //初始化线性表C
    if(A->next != NULL || B->next != NULL)
    {
        LinkList p = A->next;
        LinkList q = B->next;
        int i = 0;
        
        C.data = (SqList *)malloc(sizeof(ElemType)*(maxsize));
        if(!C.data)     printf("开辟空间失败!");
        
        while(p != NULL && q != NULL)
        {
            if(p->data == q->data)
            {
                C.data[i++] = p->data;
                p = p->next;
                q = q->next;
            }
            else if(p->data < q->data)
                p = p->next;
            else
                q = q->next;
        }
        C.length = i;
        printf("C.length=%d\n", C.length);
    }
    return C;
}


int main()
{
    LinkList A = creat();
    LinkList B = creat();
    
    SqList C = merge(A, B);
    print(C);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值