| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:求交并集
只看楼主 加入收藏
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
结帖率:89.47%
收藏
已结贴  问题点数:20 回复次数:3 
求交并集
#include<iostream.h>
#include<malloc.h>
#define NULL 0
#include<stdio.h>
typedef struct node
{
    int data;
    struct node *next;
}Linklist;
void initlist(Linklist *&L)//初始化单链表
{
    L=(Linklist *)malloc(sizeof(Linklist));
    L->next=NULL;
}
void creatList(Linklist *&L,int a[],int n)//建立单链表
{
    Linklist *r,*s;
    r=L;
    int i;
    for(i=0;i<n;i++)
    {
        s=(Linklist *)malloc(sizeof(Linklist));
        s->data=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void list(Linklist *L)// 输出单链表
{
    Linklist *p;
    p=L->next;
    if(p==NULL)
        cout<<"no list"<<endl;
    else
    {
        while(p!=NULL)
        {
            cout<<p->data<<"  ";
        p=p->next;
        }
    }
    cout<<endl;
}

void freeList(Linklist *&L)//释放单链表
{
    Linklist *p,*q;
    p=L;

    while(p!=NULL)
    {
         q=p->next;
        free(p);
        p=q;
    }
}
void sort(Linklist *&L)
{
    Linklist *p=L->next,*q,*r;
    if(p!=NULL)
    {
        r=p->next;
        p->next=NULL;
        p=r;
   
    }
    while(p!=NULL)
    {
        r=p->next;
        q=L;
        while(q->next!=NULL&&q->next->data<p->data)
            q=q->next;
        p->next=q->next;
        q->next=p;
        p=r;
    }
}
void add(Linklist *La,Linklist *Lb,Linklist *&Lc)//求交集
{
    Linklist *Pa,*Pb,*r;
    r=Lc;
    Pa=La->next;
    Pb=Lb->next;
    while(Pa)
    {
        if(Pa->data==Pb->data)
        {
            r->next=Pa;
        r=Pa;
        Pa=Pa->next;
        Pb=Pb->next;
        }
        else
        {
            if(Pb->next==NULL)
            {
                Pb=Lb;
                Pa=Pa->next;
            }
            Pb=Pb->next;
        }


    }
     
      //q=Pa->next;
   
}
void unionset(Linklist *La,Linklist *Lb,Linklist *&Lc)//求并集;
{
    Linklist *pa,*pb,*r;
    pa=La->next;
    pb=Lb->next;
    r=Lc;
    while(pa->next||pb->next)
    {
         if(pa->data<pb->data)
        {
         r->next=pa;
         r=pa;
         pa=pa->next;
         
        }
      else if(pa->data>pb->data)
      {
          r->next=pb;
          r=pb;
          pb=pb->next;
      
      }
      else
      {
          r->next=pa;
          r=pa;
          pa=pa->next;
          pb=pb->next;
        
      }
     // cout<<r->next->data<<endl;
    }
}


void main()
{
    Linklist *p,*q,*r,*m;
   
    int a[5]={1,2,5,9,8};
    int b[5]={1,2,9,7,6};
    initlist(p);
    creatList(p,a,5);
    list(p);
    cout<<endl;
    sort(p);
    list(p);
    initlist(q);
    creatList(q,b,5);
    list(q);
    cout<<endl;
    sort(q);
    list(q);
//    cout<<"求交集"<<endl;
  // initlist(r);
    //add(p,q,r);
    //list(r);
    cout<<"并并集:"<<endl;
    initlist(m);
    unionset(p,q,m);
    list(m);

}
#include<iostream.h>
#include<malloc.h>
#define NULL 0
#include<stdio.h>
typedef struct node
{
    int data;
    struct node *next;
}Linklist;
void initlist(Linklist *&L)//初始化单链表
{
    L=(Linklist *)malloc(sizeof(Linklist));
    L->next=NULL;
}
void creatList(Linklist *&L,int a[],int n)//建立单链表
{
    Linklist *r,*s;
    r=L;
    int i;
    for(i=0;i<n;i++)
    {
        s=(Linklist *)malloc(sizeof(Linklist));
        s->data=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void list(Linklist *L)// 输出单链表
{
    Linklist *p;
    p=L->next;
    if(p==NULL)
        cout<<"no list"<<endl;
    else
    {
        while(p!=NULL)
        {
            cout<<p->data<<"  ";
        p=p->next;
        }
    }
    cout<<endl;
}

void freeList(Linklist *&L)//释放单链表
{
    Linklist *p,*q;
    p=L;

    while(p!=NULL)
    {
         q=p->next;
        free(p);
        p=q;
    }
}
void sort(Linklist *&L)
{
    Linklist *p=L->next,*q,*r;
    if(p!=NULL)
    {
        r=p->next;
        p->next=NULL;
        p=r;
   
    }
    while(p!=NULL)
    {
        r=p->next;
        q=L;
        while(q->next!=NULL&&q->next->data<p->data)
            q=q->next;
        p->next=q->next;
        q->next=p;
        p=r;
    }
}
void add(Linklist *La,Linklist *Lb,Linklist *&Lc)//求交集
{
    Linklist *Pa,*Pb,*r;
    r=Lc;
    Pa=La->next;
    Pb=Lb->next;
    while(Pa)
    {
        if(Pa->data==Pb->data)
        {
            r->next=Pa;
        r=Pa;
        Pa=Pa->next;
        Pb=Pb->next;
        }
        else
        {
            if(Pb->next==NULL)
            {
                Pb=Lb;
                Pa=Pa->next;
            }
            Pb=Pb->next;
        }


    }
     
      //q=Pa->next;
   
}
void unionset(Linklist *La,Linklist *Lb,Linklist *&Lc)//求并集;
{
    Linklist *pa,*pb,*r;
    pa=La->next;
    pb=Lb->next;
    r=Lc;
    while(pa->next||pb->next)
    {
         if(pa->data<pb->data)
        {
         r->next=pa;
         r=pa;
         pa=pa->next;
         
        }
      else if(pa->data>pb->data)
      {
          r->next=pb;
          r=pb;
          pb=pb->next;
      
      }
      else
      {
          r->next=pa;
          r=pa;
          pa=pa->next;
          pb=pb->next;
        
      }
     // cout<<r->next->data<<endl;
    }
}

为什么上面和下面求出的并集不同啊  求解释!!!!!!!
void main()
{
    Linklist *p,*q,*r,*m;
   
    int a[5]={1,2,5,9,8};
    int b[5]={1,2,9,7,6};
    initlist(p);
    creatList(p,a,5);
    list(p);
    cout<<endl;
    sort(p);
    list(p);
    initlist(q);
    creatList(q,b,5);
    list(q);
    cout<<endl;
    sort(q);
    list(q);
  cout<<"求交集"<<endl;
  initlist(r);
    add(p,q,r);
    list(r);
    cout<<"并并集:"<<endl;
    initlist(m);
    unionset(p,q,m);
    list(m);

}
搜索更多相关主题的帖子: include next 
2011-04-11 22:46
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:14 
你有自己的看法吗?还是完全不懂?
2011-04-12 09:25
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
收藏
得分:0 
这是我自己写的啊  我觉得应该是不会有改变,但是运行的结果却不同啊
2011-04-12 10:27
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你的代码哪些地方改了你能注释吗?
2011-04-12 15:08
快速回复:求交并集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018199 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved