本文共 2142 字,大约阅读时间需要 7 分钟。
目的:使用STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。
应用6:假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求设计一个算法,另辟空间构成一个线性表C,其元素为A和B中元素的交集,且C中的元素也依值递增有序排列。
参考函数原型:
templatevoid Intersect_Sq_OL_C( const vector &A, const vector &B, vector &C );
第一行:有序顺序表A的长度
第二行:有序顺序表A的数据元素(数据元素之间以空格分隔)
第三行:有序顺序表B的长度
第四行:有序顺序表B的数据元素(数据元素之间以空格分隔)
第一行:顺序表A的遍历结果
第二行:顺序表B的遍历结果
第三行:顺序表C的遍历结果
51 3 5 7 981 2 3 4 5 6 9 11
1 3 5 7 9 1 2 3 4 5 6 9 11 1 3 5 9
#include#include using namespace std;/* description:function to compare two elements*/template void sort(vector &A){ Elemtype temp; for(int i = 0;i < A.size();i ++) { for(int j = i + 1;j < A.size();j ++) { if(A.at(i) > A.at(j)) { temp = A.at(i); A.at(i) = A.at(j); A.at(j) = temp; } } }}/* description:show all the elements of the vector*/template void show(const vector & A){ typename std::vector test = A; typename std::vector ::iterator iter; for(iter = test.begin();iter != test.end();iter ++) { cout<<*iter<<" "; } cout< void Intersect_Sq_OL_C( const vector &A , const vector &B , vector &C ){ show(A); show(B); cout< < B.size(); j++) { if(A.at(i) == B.at(j)) { isFlag = true; break; } } if(isFlag) { C.push_back(A.at(i)); isFlag = false; } } show(C);}int main(){ int Asize; cin>>Asize; string str; cin>>str; if(str == "a") { vector A(Asize); A.at(0) = str; for(int i = 1 ; i < Asize; i ++) { cin>>str; A.at(i) = str; } int Bsize; cin>>Bsize; vector B(Bsize); for(int i = 0 ; i < Bsize;i ++) { cin>>str; B.at(i) = str; } vector C; Intersect_Sq_OL_C(A,B,C); } else { vector B(Asize); B.at(0) = atoi(str.c_str()); int temp; for(int i = 1 ; i < Asize; i ++) { cin>>temp; B.at(i) = temp; } int Bsize; cin>>Bsize; vector B1(Bsize); for(int i = 0 ; i < Bsize;i ++) { cin>>temp; B1.at(i) = temp; } vector C; Intersect_Sq_OL_C(B,B1,C); } return 0;}
转载地址:http://twwvb.baihongyu.com/