注册 登录
编程论坛 VC++/MFC

用c语言链表实现集合并集时的问题

zhaoshirui 发布于 2013-10-06 15:46, 718 次点击
想用链表求两个集合的并集,交集,差集,但是写并集的时候就出现了问题。我往大神指点,下面贴上代码
#include<stdio.h>
#include<stdlib.h>

struct LNode
 {
   int data;
   LNode *next;
 };
typedef LNode *LinkList;

 void CreateLinkList(LinkList &L,int n)
 { // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
   int i;
   LinkList p,q;
   L=(LinkList)malloc(sizeof(LNode)); // 生成头结点
   L->next=NULL;
   q=L;
   printf("请输入%d个数据\n",n);
   for(i=1;i<=n;i++)
   {
     p=(LinkList)malloc(sizeof(LNode));
     scanf("%d",&p->data);
     q->next=p;
     q=q->next;
   }
   p->next=NULL;
 }

 int LocateElem_L(LinkList &L,int e)  //查找元素e是否在集合中
 {
     LinkList p;
     p=L->next;
     while(p->next)
     {
         if(e==p->data)
             return 1;
         else p=p->next;
     }
     return 0;
 }

 void ListInsert(LinkList &L,int e)
 {
     LinkList pa,p;
     for(pa=L->next;pa->next;pa=pa->next);
     p=(LinkList)malloc(sizeof(LNode));
     p->data=e;
     p->next=pa->next;     
     if(pa==NULL) pa=p;
     else pa->next=p;
 }

 void Union(LinkList &La,LinkList &Lb,LinkList &Lc)
 {
     LinkList p,q;
     for(p=La->next;p;p=p->next)
         Lc->next->data=p->data;
      for(q=Lb->next;q!=NULL;q=q->next)
         if(LocateElem_L(La,q->data)==0)
             ListInsert(Lc,q->data);
 }

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

 void main()
 {
     LinkList La,Lb,Lc;
     CreateLinkList(La,3);
 //    ListInsert(La,6);
  //   PrintLinkList_L(La);
     CreateLinkList(Lb,3);
     Union(La,Lb,Lc);
     PrintLinkList_L(Lc);
 }
4 回复
#2
yuccn2013-10-07 08:42
出现什么问题 ,你总的说明一下吧
#3
zhaoshirui2013-10-07 09:50
回复 2楼 yuccn
应该是内存的问题,我也不是很懂,问题出在那个Union函数上,大神你可以帮我运行下吗?
#4
qunxingw2013-10-07 10:19
Lb数据已是申请了内存的,只要根据情况插入Lc即可,但你的void ListInsert(LinkList &L,int e)又申请了内存。你可参考下
https://bbs.bccn.net/viewthread.php?tid=421442&page=1#pid2352828
#5
zhaoshirui2013-10-10 18:44
谢谢
1