代码:
//这个不是我的代码 //链表表示集合,求两个集合交集 Intersection() #include<iostream> using namespace std; template<class T> //链表结点 struct SLNode{ T data;//数据 SLNode<T> *next;//指针 SLNode(SLNode * nextNode = NULL){next = nextNode;} SLNode(const T& item, SLNode * nextNode = NULL){data = item; next = nextNode;} }; template <class T> //链表 class SLList{ private: SLNode<T> * head;//头指针 SLNode<T> * cur;//当前指针 SLNode<T> * rear;//尾指针 int size; public: SLList();//构造函数,创建一个只有哨位结点的单链表 SLList(T& item);//构造函数,创建有一个哨位结点和一个表结点的单链表 ~SLList();//析构函数 void InsertHead(const T& item);//表头插入 bool FindCur(T& item)const; T& GetCur(){return cur->data;} int Search(const T& item);//查找值为x的元素在单链表中出现的位置(是链表中的第几个元素) void SetStart(){cur = head;} bool Next(){while(cur != rear) {cur = cur->next;return true;}return false;} int IsEmpty(){return head == rear;} }; template <class T> SLList<T>::SLList(){ head = rear = cur = new SLNode<T>(NULL); size = 0; } template <class T> SLList<T>::SLList(T& item){ rear = cur = new SLNode<T>(item,NULL); head = new SLNode<T>(cur); } template <class T> SLList<T>::~SLList(){ while(head->next != NULL){ cur = head->next; head->next = cur->next; delete cur; } delete head; } template <class T> void SLList<T>::InsertHead(const T& item){ if(!head->next) head->next = cur = rear = new SLNode<T>(item, NULL); else{ if(Search(item) == -1) head->next = new SLNode<T>(item, head->next); } size++; } template <class T> int SLList<T>::Search(const T& item){ if(head == rear){ return -1; } int i = 0; cur = head; while(cur->next){ i++; if(cur->next->data == item) return i; cur = cur->next; } return -1; } template <class T> bool SLList<T>::FindCur(T& item)const{ if(!cur){ return false; } item = cur->data; return true; } template<class T> void printlist(SLList<T>* list){ list->SetStart(); T item; if(list->IsEmpty()) cout<<"空集"; else while(list->Next()){ list->FindCur(item); cout<<item<<" "; } cout<<endl; } template<class T> void Intersection(SLList<T> *p,SLList<T> *q,SLList<T> *r){ p->SetStart(); while(p->Next()){ if(q->Search(p->GetCur()) > -1) r->InsertHead(p->GetCur()); } } int main(){ int n,item; SLList<int> *p = new SLList<int>; SLList<int> *q = new SLList<int>; SLList<int> *r = new SLList<int>; cout<<"请输入链表元素个数:"; cin>>n; cout<<"请输入链表元素,链表元素为整型:"<<endl; for(int i = 0; i < n; i++){ cin>>item; p->InsertHead(item); } cout<<"请输入链表元素个数:"; cin>>n; cout<<"请输入链表元素,链表元素为整型:"<<endl; for(int i = 0; i < n; i++){ cin>>item; q->InsertHead(item); } cout<<"集合 p 为:"<<endl<<endl; printlist(p); cout<<endl; cout<<"集合 q 为:"<<endl<<endl; printlist(q); cout<<endl; cout<<"集合 p 与集合 q 的交集 r 为:"<<endl<<endl; Intersection(p,q,r); printlist(r); cout<<endl; return 0; }
运行结果: