if(pl=NULL&&p->data=x){/找到 q->link=p->link;/重新链接 if( p=-- last )last=q; /删去链尾结点时改链尾指针 delete p; return1;删除含x结点 else return o /集合中无此元素 用有序链表表示集合时的几个重载函数 template <class Type> Setlist<Type>& setlist<Type>::
if ( p != NULL && p->data == x ) { //找到 q->link = p->link; //重新链接 if ( p == last ) last = q; //删去链尾结点时改链尾指针 delete p; return 1; //删除含x结点 } else return 0; //集合中无此元素 } 用有序链表表示集合时的几个重载函数 template <class Type> SetList<Type>& SetList<Type> ::
operator=( SetList<Type>& right)( /制集合righ到this SetNode<Type>s pb=right. first->link; l SetNode< type>x pa- first ∥/目标 new SetNode<Type> while(pbl=NULL){/个结点复制 pa->link=new SetNode<Type>(pb->data); pa=pa->link, pb= pb->link; pa->ink- NULL; last= pa return * this; /目标链表收尾
operator = ( SetList<Type>& right ) { //复制集合right到this SetNode<Type> * pb = right.first->link; //源 SetNode<Type> * pa = first = //目标 new SetNode<Type>; while ( pb != NULL ) { //逐个结点复制 pa->link = new SetNode<Type>(pb->data); pa = pa->link; pb = pb->link; } pa->link = NULL; last = pa; return *this; //目标链表收尾 }
/求集合this与集合righ的并结果通过临时 /集合temp返回,this集合与 right集合不变。 pa frs-_17+351 right. first 08+17+23+49 b pc temp. first-+08+171+23+3549 template <class Type> Setlist<Type>& setlist<Type> operator + Setlist< Type>& right )i
//求集合this与集合right的并, 结果通过临时 //集合temp返回,this集合与right集合不变。 template <class Type> SetList<Type>& SetList<Type> :: operator + ( SetList<Type>& right ) { first right.first 08 17 23 49 temp.first 23 17 35 pa pb pc 08 17 23 35 49
SetNode<type> xpb=right. first->link, SetNode<Type>pa- first->link; Setlist< Type> temp; SetNode<Type> xpc =temp. first while( pa!= nULL & pb! =NULL) if(pa->data==pb->data){∥共有元素 pc->link-new SetNode<Type>(pa->data) pa- pa->link; pb=pb->link; 3 else if( pa->data< pb->data)i pc->link-new SetNode<Type>(pa->data) pa- pa->link; 3 else( /pa->data> pb->data
SetNode<Type> *pb = right.first->link; SetNode<Type> *pa = first->link; SetList<Type> temp; SetNode<Type> *pc = temp.first; while ( pa != NULL && pb != NULL ) { if ( pa->data == pb->data ) { //共有元素 pc->link=new SetNode<Type>(pa->data); pa = pa->link; pb = pb->link; } else if ( pa->data < pb->data ) { pc->link=new SetNode<Type>(pa->data); pa = pa->link; } else { //pa->data > pb->data
pc->link-new SetNode<Type>(pb->data); b=pb->link; pc=pc->link; if(pal=NULL)pb=pa;/pb指未扫完集合 while(pbl=NULL){/向结果链逐个复制 pc->link- new SetNode<Type>(pb->data pc=pc->link; pb= pb->link; pC->link=NULL;temp.last=pc;∥链表收尾 return temp
pc->link=new SetNode<Type>(pb->data); pb = pb->link; } pc = pc->link; } if ( pa != NULL ) pb = pa; //pb指未扫完集合 while ( pb != NULL ) { //向结果链逐个复制 pc->link = new SetNode<Type>(pb->data); pc = pc->link; pb = pb->link; } pc->link = NULL; temp.last = pc; //链表收尾 return temp; }