千殇937 2021-11-14 13:49 采纳率: 50%
浏览 13
已结题

(单链表)代码没报错,调用了方法却没有运行

#include "stdio.h"
#include "malloc.h"
#define FALSE 0
#define TRUE 1
typedef int elemtype;

typedef struct LinkList {
elemtype data;
struct LinkList *next;
}LinkList;

LinkList *InitList(){
LinkList *head;
head = (LinkList *)malloc(sizeof(LinkList));
head ->next =NULL;
return head;
}

int ListInsert(LinkList *L,int x,int e)
{
int j = 0;
LinkList *p = L, *s;
while(p!=NULL && j<x-1)
{
p = p->next;
j++;
}
if(p==NULL)
{
return FALSE;
}
else
{
s = (LinkList *)malloc(sizeof(LinkList));
s->data = e;
s->next = p->next;
p->next = s;
return TRUE;
}
}

LinkList *jiaoji(LinkList *La,LinkList *Lb) {
LinkList *Lc,*pa,*pb,*pc,*qc;
Lc = pc = (LinkList *)malloc(sizeof(LinkList));
pc->data = 0;
pa = La->next;
pb = Lb;
while(pa != La) {
pb = Lb->next;
while(pb != Lb) {
if(pb->data == pa->data) {
qc = (LinkList *)malloc(sizeof(LinkList));
qc->data = pb->data;
pc->next = qc;
pc = qc;
}
pb = pb->next;
}
pa = pa->next;
}
pc->next = Lc;
return Lc;
}

void DispList(LinkList *L)
{
LinkList *p = L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}

int main() {
LinkList *La,*Lb,*Lc;
int i=0,j=0,len1=0,len2=0;
elemtype e;

La = InitList();       
printf("输入集合A中的元素数:");
scanf("%d",&len1);
printf("输入集合A中的数据元素(按回车添加下一个元素):\n");
for(i;i<len1;i++){
    scanf("%d",&e);
    ListInsert(La,i+1,e);
}
printf("链表1:");
DispList(La);

Lb = InitList(); 
printf("输入集合B中的元素数:");
scanf("%d",&len2);
printf("输入集合B中的数据元素(按回车添加下一个元素):\n");
for(j;j<len2;j++){
    scanf("%d",&e);
    ListInsert(Lb,j+1,e);
}    
printf("链表2:");
DispList(Lb);

printf("两个集合的交集:");
Lc = InitList();
Lc = jiaoji(La,Lb);
DispList(Lc);

}

img

  • 写回答

1条回答 默认 最新

  • 关注

    求交集的代码有问题,代码修改如下(修改部分在代码中有标注)。如有帮助,请帮忙采纳一下,谢谢。

    #include "stdio.h"
    #include "malloc.h"
    #define FALSE 0
    #define TRUE 1
    typedef int elemtype;
    
    typedef struct LinkList {
        elemtype data;
        struct LinkList *next;
    }LinkList;
    
    LinkList *InitList(){
        LinkList *head;
        head = (LinkList *)malloc(sizeof(LinkList));
        head ->next =NULL;
        return head;
    }
    
    int ListInsert(LinkList *L,int x,int e)
    {
        int j = 0;
        LinkList *p = L, *s;
        while(p!=NULL && j<x-1)
        {
            p = p->next;
            j++;
        }
        if(p==NULL)
        {
            return FALSE;
        }
        else
        {
            s = (LinkList *)malloc(sizeof(LinkList));
            s->data = e;
            s->next = p->next;
            p->next = s;
            return TRUE;
        }
    }
    
    LinkList *jiaoji(LinkList *La,LinkList *Lb) {
        LinkList *Lc,*pa,*pb,*pc,*qc;
        Lc = pc = (LinkList *)malloc(sizeof(LinkList));
        pc->data = 0;
        pa = La->next;
        pb = Lb;
        pc = Lc; //增加
        while(pa ) { //修改 pa!= La
            pb = Lb->next;
            while(pb) { //修改pb != Lb
                if(pb->data == pa->data) {
                    qc = (LinkList *)malloc(sizeof(LinkList));
                    qc->data = pb->data;
                    pc->next = qc;
                    pc = qc;
                    break; //增加
                }
                pb = pb->next;
            }
            pa = pa->next;
        }
        pc->next = NULL;// 修改Lc;
        return Lc;
    }
    
    void DispList(LinkList *L)
    {
        LinkList *p = L->next;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    int main() {
        LinkList *La,*Lb,*Lc;
        int i=0,j=0,len1=0,len2=0;
        elemtype e;
    
        La = InitList();       
        printf("输入集合A中的元素数:");
        scanf("%d",&len1);
        printf("输入集合A中的数据元素(按回车添加下一个元素):\n");
        for(i;i<len1;i++){
            scanf("%d",&e);
            ListInsert(La,i+1,e);
        }
        printf("链表1:");
        DispList(La);
    
        Lb = InitList(); 
        printf("输入集合B中的元素数:");
        scanf("%d",&len2);
        printf("输入集合B中的数据元素(按回车添加下一个元素):\n");
        for(j;j<len2;j++){
            scanf("%d",&e);
            ListInsert(Lb,j+1,e);
        }    
        printf("链表2:");
        DispList(Lb);
    
        printf("两个集合的交集:");
        //Lc = InitList();  //这里不需要
        Lc = jiaoji(La,Lb);
        DispList(Lc);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月15日
  • 已采纳回答 11月14日
  • 创建了问题 11月14日

悬赏问题

  • ¥20 微信h5网页如何静默获取到用户的基本信息(头像昵称)
  • ¥15 有做通信软件的技术团队吗
  • ¥15 如图所示交换机网络该如何规划配置
  • ¥15 CUDA driver error
  • ¥15 Dijkstra 算法的堆优化方法
  • ¥15 师哥师姐们,如何帮我下载一下python?
  • ¥15 Office版本升级,Oracle连接报错
  • ¥20 利用python搜索PDF文件中是否存在1
  • ¥15 ImportPathMismatchError
  • ¥15 滤波器这个效果是对的么