数据结构与算法分析 c++11 练习3.4 3.5 给定两个已排序的表L1和L2,求交集和并集

来源:互联网 发布:浙江省网络作协扶持 编辑:程序博客网 时间:2024/05/28 15:56


这个小问题没怎么考虑效率,用List标准库的函数实现下吧。


#include <iostream>#include <list> using namespace std; void printList(list<int> t){auto itr = t.begin();while (itr!=t.end()){  cout << *itr++<<" ";    }cout << endl;} template <typename T>list<T> intersectionList(list<T> &lhs, list<T> &rhs){list<T> itrsectLst;auto l1 = lhs.begin();for (; l1 != lhs.end(); l1++){auto r2 = rhs.begin();if (*l1 < *r2 || *l1 > *(--rhs.end()))continue;else {for (; r2 != rhs.end(); r2++){if (*l1 == *r2)itrsectLst.push_back(*l1);}}}itrsectLst.sort();itrsectLst.unique();return itrsectLst;}template <typename T>list<T> unionList(list<T> &lhs, list<T> &rhs){list<T> unionLst=lhs,temLst=rhs;unionLst.sort();temLst.sort();unionLst.merge(temLst);unionLst.unique();return unionLst;}int main(){ list<int> lbt= { 15,12,0, 2, 3, 5, 6, 7, 9, 12 }, rbt={ 1, 2, 4, 5, 7, 8, 9,12, 13 };list<int> itslst,unionlst;printList(lbt);printList(rbt);cout << "test intersection: " << endl;itslst=intersectionList(lbt,rbt);printList(itslst);cout << "test union: " << endl;unionlst = unionList(lbt, rbt);printList(unionlst);}





0 0
原创粉丝点击