用单链表实现集合的交、并、差运算

三段式c++
主函数里,
1.如何调用指针函数(下方蓝色字体函数如何调用)。
2.函数中的参数(指针类型的对象,应该如何传入)。
3.如何让指针对象初始化(指向单链表的表头)

“LinlList.h”
#define SLIST
template
struct Node{
T data;
struct Node *next;
};
template
class LinkList
{
public:
LinkList();
LinkList(T a[],int n); //尾插
LinkList(int n,T a[]);
~LinkList();
int GetLength();
T Get(int i);
void Set(int i,T x);
int Locate(T x);
void Insert (int i,int j,T a[]);
T Delete(int i);
void PrintLinkList();
Node *GetFirst();
Node *Union(LinkList *la,LinkList *lb);
Node *Intersection(LinkList *la,LinkList *lb);
Node *Difference(LinkList *la,LinkList *lb);
Node *Judge(LinkList *la,LinkList *lb);
private:
T data;
Node *first;
};

“LinkList.cpp”
#include "LinkList.h"
#include
#include
using namespace std;
template
LinkList::LinkList()
{
first=new Node;
first->next=NULL;
}
template
LinkList::LinkList(T a[],int n)
{
first=new Node;Node *s;
first->next=NULL;
for (int i=0;i {
s=new Node; s->data=a[i];
s->next=first->next;first->next=s;
}
}
template
LinkList::LinkList(int n,T a[])
{
first=new Node;first->next=NULL;
Node *r=first,*s;
for(int i=0;i {
s=new Node;s->data=a[i];r->next=s;r=s;
}
r->next=NULL;
}
template
LinkList::~LinkList()
{
Node *p=first;
while (p)
{
Node *q=p;
p=p->next;delete q;
}
}
template
int LinkList::GetLength()
{
Node *p=first; int j=0;
while (p)
{
p=p->next;j++;
}
return j;
}
template
T LinkList::Get(int i)
{
Node *p=first->next;int j=1;
while(p&&jnext;j++;}
if(!p) throw"位置錯誤";else return p->data;
}
template
void LinkList::Set(int i,T x) //把i位置的元素用X替代
{
Node *p=first->next; int j=1;
while (p&&jnext;j++;
}
if(!p) throw "位置error";
else p->data=x;
}

/*
template
void LinkList::Insert(int i,T x)
{
Node *p=first;int j=0;
while (p&&i-1)
{

p=p->next;j++;
}
if(!p)throw"位置出錯";
else{ Node *s=new Node;
s->data=x;s->next=p->next;p->next=s;
}

}*/

template
void LinkList::Insert(int i,int j,T a[])
{
Node *p=first;int k=0;
while (p&&i-1)
{

p=p->next;k++;
}
if(!p)throw"位置出錯";
else{ Node *s=new Node;
s->data=a[j];s->next=p->next;p->next=s;
}

}

template
T LinkList::Delete(int i)
{
Node *p;
int j;
while (p&&j {p=p->next;j++;}
if(!p||!p->next) throw"位置";
else{Node *q=p->next;
T x=q->data;p->next=q->next;
delete q; return x;
}

}

template
void LinkList::PrintLinkList()
{
Node *p=first->next;
while (p)
{
cout<data;
p=p->next;
}
}
template
Node *LinkList::GetFirst()
{
return first;
}

template
Node *LinkList::Union(LinkList *la,LinkList *lb) //并运算
{
Node *pa,*pb,*p,*pc,*atail,*tail;
LinkList *lc;
pa=(la->GetFirst())->next;
pb=(lb->GetFirst())->next;
atail=pa;
while(atail->next!=NULL)
atail=atail->next; //atail指向la单链表的尾结点
tail=atail //tail指向la单链表与lb单链表合并处
lc=la; //对象la赋值给对象lc(la单链表头结点作为lc单链表头结点)

while(pb)
{
while(pb->data!=pa->data && pa!=atail)
pa=pa->next;

if (pb->data==pa->data)
{
p=pb;pb=pb->next;
delete p;
pa=la->GetFirst()->next;
}
else
if(pb->data!=pa->data)
{
atail->next=pb; atail=atail->next;
pb=pb->next; pa=la->GetFirst()->next;

    } 
    else
    {
     p=pb;pb=pb->next;  delete p;
     pa=la->GetFirst()->next;
    }

}
atail->next=NULL; lb->GetFirst()->next=NULL;
return lc->GetFirst()->next;

}

template
Node *LinkList::Intersection(LinkList *la,LinkList *lb) //交运算
{

return lc->GetFirst()->next;

}

template

Node *LinkList::Difference(LinkList *la,LinkList *lb) //差运算
{

return lc->GetFirst()->next;
}

template

Node *LinkList::Judge(LinkList *la,LinkList *lb) //子集判定
{

return lc->GetFirst()->next;

}

LinkList-main.cpp
#ifndef SLIST
#include "LinkList.cpp"
#endif
#include
using namespace std;
int main()
{
try{
int r1[]={1,2,3,4,5};
cout<<"\n前插方式新建单链表b!"< LinkList a(r1,5);
cout<<"单链表b的元素为:";
a.PrintLinkList() ;
cout<<"\n单链表b的长度为:"< int r2[]={6,7,8,9,10};
cout LinkList b(5,r2);
cout<<"单链表c的元素为:";
b.PrintLinkList() ;
cout<<"\n单链表c的长度为:";
cout< LinkList d;

LinkList *la;
LinkList *lb;

    d.Union(LinkList<T> *la,LinkList<T> *lb); 


    /*if(c.GetLength())
    {
        cout<<"执行删除第一个元素操作:"<<endl;
        c.Delete(1);
        cout<<"已删除成功,单链表c的长度为:";
        cout<<c.GetLength() <<endl;
    }
    else cout<<"单链表c长度为0"<<endl;*/
//  cout<<"单链表c为:";
//  c.PrintLinkList() ;

}
catch(const char *msg)
  {cout<<msg;
   } 
return 0;

}

我是来挣积分的 不错很好的代码哦

1.调用指针函数。
首先指针函数是指返回指针的函数。所以它的调用和一般函数的调用时一样的,只是返回的值是一个指针类型。
2.函数中的参数(指针类型的对象,应该如何传入)。
指针类型的参数也是传入指针类型的变量的。
3.如何让指针对象初始化(指向单链表的表头)。
一般可以直接指向NULL。然后再赋值。

1.调用指针函数。
首先指针函数是指返回指针的函数。所以它的调用和一般函数的调用时一样的,只是返回的值是一个指针类型。
2.函数中的参数(指针类型的对象,应该如何传入)。
指针类型的参数也是传入指针类型的变量的。
3.如何让指针对象初始化(指向单链表的表头)。
一般可以直接指向NULL。然后再赋值。
这个写的对

1.调用指针函数
你应该是问的如何调用返回指针的函数!调用方式和一般函数一样,但它的返回值是一个指针,返回结果也要赋给一个相同类型的指针。举例说:
函数 int * get_head(void),返回一个int型指针,在调用时要把返回结果赋给一个int型指针变量,int * head = get_head();
2.函数中的参数(指针类型的对象,应该如何传入)
这个和普通参数一样,传入的类型相匹配就行了。举例说:int * get_head(List * my_list),传入的参数要是一个List对象的指针,List A; List * B = new List()
上面定义了两个List对象,传入方法分别为 int *head = get_head(&A)和 int *head = get_head(B)
3.指针对象初始化
这个也普通变量一样,上面一个问题中就有一个指针初始化List *B = new List(),这个是新创建一个对象。也可以把已有对象的地址(指针)赋值对这个
指针,List A; List *B = &A;

对于你问的这个 Node *LinkList::Union(LinkList *la,LinkList *lb),只看这个函数声明,猜测是把两个链表合成一个链表 。
LinkList类有一个函数Union,它的参数是LinkList的两个指针la和lb,这个两个指针是LinkList自己的对象指针,Union返回值是Node类的指针