利用链表求集合并集

#include<iostream>
using namespace std;
typedef int datatype;
struct node{
    datatype data;
    node *next;
};
class list{
    public:
        list();
        int length()const;
        //~list();
        datatype get_num(int i);
        node* locate(const datatype x)const;
        void insert(const int i,datatype x);
        void delete_num(const int i);
        void show();
        void create();
        node* get_head()   {return head;}
        
    private:
        int count;
        node* head;              //带头结点的链式线性表 
};

list::list(){
    head=new node;
    head->next=NULL;
    count=0;
}

int list::length()const
{
    return count;
}

datatype list::get_num(int i)
{
    node* p=head->next;  int j=1;
    while(p!=NULL&&j!=i)
    {
        p=p->next;  j++;   
    }
    if(p==NULL)  cout<<"Range Error...\n";           //==之前写成=,坑死我了 
    return p->data;
}

node* list::locate(const datatype x)const
{
    node *p=head->next;
    while(p!=NULL)
    {
        if(p->data==x) return p;
        else p=p->next;
    }
    return NULL;             
}

void list::insert(const int i,datatype x)     //插入 
{
    if(i<1||i>count+1)  cout<<"Range Error...\n";
    node *p=head;  int j=0;
    while(j!=i-1&&p!=NULL)        //搜索前一个节点 
    {
        p=p->next; j++;
    }
    node *s=new node;
    s->data=x;
    s->next=p->next;
    p->next=s;
    count++;
}

void list::delete_num(const int i)
{
    node *p=head;  int j=0;
    while(j!=i-1&&p!=NULL)
    {
        p=p->next; j++;
    }
    if(i<1||i>count)  cout<<"Range Error...\n";
    node *u=p->next;
    p->next=u->next;
    delete u;
    count--;
}

void list::show()
{
    node *p=head->next;
    for(int i=0;i<count;i++)
    {
        cout<<p->data<<" ";
        p=p->next; 
    }
    cout<<endl;
}

void list::create()    
{
    cout<<"now...\n"; 
    datatype x;cin>>x;
    while(x!='#')
    {
        count++;
        insert(1,x);
        cin>>x;
    }
}
/*
void union (list a,list b)  //并集    用函数总报错??what wrong ? 
{
    node *pa,*pb;
    bool flag;
    for(pb=b.get_head()->next;pb->next!=NULL;pb=pb->next)
    {
        flag=false;
        for(pa=a.get_head()->next;pa->next!=NULL;pa=pa->next)
        {
            if(pb->data==pa->data)  flag=true;
        }
        if(flag!=true)  a.insert(a.length()+1,pb->data);
    }
    a.show();

*/
int main()
{
    list a,b;
    a.insert(1,2);a.insert(2,3);a.insert(3,4);a.insert(4,5);
    b.insert(1,4);b.insert(2,5);b.insert(3,6);
    a.show();
    b.show();
    int la=a.length(),lb=b.length();
    node *pb=b.get_head()->next;
    bool flag;
    for(int j=0;j<lb;j++)
    {
        flag=false;
        node *pa=a.get_head()->next;
        
        for(int i=0;i<la;i++)
        {
            if(pb->data==pa->data)  flag=true;
            pa=pa->next;
        }
        if(flag!=true)  a.insert(la+1,pb->data);
        pb=pb->next;
    }
    a.show();
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页