今天下午写了个集合的小玩意,没事闲的。。。 #ifndef _H_SET #define _H_SET #include <iostream> #include <stdlib.h> using namespace std; struct Node; typedef struct Node *PNode; struct Node { int data; PNode next; }; typedef struct Node *LinkSet; void printSet(LinkSet set) { PNode tmp=set; while(tmp!=NULL) { cout<<tmp->data<<" "; tmp=tmp->next; } } LinkSet createSet(int *array,int n) { if(array==NULL) { cout<<"This is an empty array!"<<endl; return NULL; } LinkSet set=(LinkSet)malloc(sizeof(struct Node)); set->data=-1; set->next=NULL; PNode tmp=set; for(int i=0;i<n;++i) { PNode node=(PNode)malloc(sizeof(struct Node)); node->data=array[i]; node->next=NULL; tmp->next=node; tmp=tmp->next; } return set; } void unionSet(LinkSet s0,LinkSet s1,LinkSet t) { if(s0==NULL || s1==NULL || t==NULL) { cout<<"illigel parameters..."<<endl; return ; } PNode s2=t; s2->next=NULL; s1=s1->next; s0=s0->next; int data=-1; while(s1!=NULL && s0!=NULL) { if(s1->data<s0->data) { if(s1->data>data) { PNode tmp=(PNode)malloc(sizeof(struct Node)); tmp->data=s1->data; tmp->next=NULL; s2->next=tmp; s1=s1->next; s2=s2->next; data=tmp->data; } else { s1=s1->next; } } else if(s1->data>s0->data) { if(s0->data>data) { PNode tmp=(PNode)malloc(sizeof(struct Node)); tmp->data=s0->data; tmp->next=NULL; s2->next=tmp; s0=s0->next; s2=s2->next; data=tmp->data; } else { s0=s0->next; } } else { if(s0->data>data) { PNode tmp=(PNode)malloc(sizeof(struct Node)); tmp->data=s0->data; tmp->next=NULL; s2->next=tmp; s1=s1->next; s0=s0->next; s2=s2->next; data=tmp->data; } else { s1=s1->next; s0=s0->next; } } } while(s0!=NULL) { if(s0->data>data) { PNode tmp=(PNode)malloc(sizeof(struct Node)); tmp->data=s0->data; tmp->next=NULL; s2->next=tmp; s2=s2->next; s0=s0->next; } else { s0=s0->next; } } while(s1!=NULL) { if(s1->data>data) { PNode tmp=(PNode)malloc(sizeof(struct Node)); tmp->data=s1->data; tmp->next=NULL; s2->next=tmp; s2=s2->next; s1=s1->next; } else { s1=s1->next; } } } void subtractSet(LinkSet s0, LinkSet s1, LinkSet t) { if(s0==NULL || s1==NULL || t==NULL) { cout<<"illigel parameters..."<<endl; return; } PNode s2=t; s0=s0->next; s1=s1->next; while(s0!=NULL && s1!=NULL) { if(s0->data==s1->data) { int value=s0->data; while(s0->data==value && s0->next!=NULL) { s0=s0->next; } while(s1->data==value && s1->next!=NULL) { s1=s1->next; } if(s0->next==NULL || s1->next==NULL) { break; } } else if(s0->data<s1->data) { PNode p=(PNode)malloc(sizeof(struct Node)); p->data=s0->data; p->next=NULL; s2->next=p; s2=s2->next; while(s0->data==p->data) { s0=s0->next; } } else { while(s1->data<s0->data) { s1=s1->next; } } } while(s0!=NULL) { PNode p=(PNode)malloc(sizeof(struct Node)); p->data=s0->data; p->next=NULL; s2->next=p; s2=s2->next; s0=s0->next; } } void intersection(LinkSet s0,LinkSet s1, LinkSet t) { if(s0==NULL || s1==NULL || t==NULL) { cout<<"illigel parameters..."<<endl; return ; } PNode s2=t; s2->next=NULL; s0=s0->next; s1=s1->next; while(s0!=NULL && s1!=NULL) { if(s0->data>s1->data) { s1=s1->next; } else if(s0->data<s1->data) { s0=s0->next; } else if(s0->data==s1->data) { PNode p=(PNode)malloc(sizeof(sizeof(struct Node))); p->data=s0->data; p->next=NULL; s2->next=p; s0=s0->next; s1=s1->next; s2=s2->next; } } } #endif