您的位置:首页 > 理论基础 > 数据结构算法

仅使用基本的表操作实现两个排序后的表L1和L2的并集

2012-11-27 13:28 633 查看

针对Weiss著的《数据结构与算法分析(C++描述+第三版)习题答案中的3.5题的分析

原题:给定两个排序后的表L1和L2,。写出一个程序仅使用基本的表操作来计算L1UL2。

习题答案中的程序如下:

// Assumes both input lists are sorted
template <typename Object>
list<Object> listUnion( const list<Object> & L1,
const list<Object> & L2)
{
list<Object> result;
typename list<Object>:: const_iterator iterL1 = L1.begin();
typename list<Object>:: const_iterator iterL2= L2.begin();
while(iterL1 != L1.end() && iterL2 != L2.end())
{
if (*iterL1 == *iterL2)
{
result.push_back(*iterL1);
iterL1++;
iterL2++;
}
else if (*iterL1 < *iterL2)
{
result.push_back(*iterL1);
iterL1++;
}
else
{
result.push_back(*iterL2);
iterL2++;
}
}
return result;
}
上述程序会有这样一个问题,当iterL1或者iterL2指向end时,程序将直接结束,实际上表L1或者L2中还有元素没有处理,这样并没有完成真正的并集运算。

下边是自己对此函数的改进并加了一个简单的测试程序:
#include<iostream>
#include<list>
using namespace std;
template <typename Object>
list<Object> listUnion( const list<Object> & L1, const list<Object> & L2)
{
list<Object> result;
typename list<Object>:: const_iterator iterL1 = L1.begin();
typename list<Object>:: const_iterator iterL2= L2.begin();
while(iterL1 != L1.end() || iterL2 != L2.end())
{
if(iterL1==L1.end() && iterL2 != L2.end())
result.push_back(*iterL2++);
else if(iterL1 != L1.end() && iterL2==L2.end())
result.push_back(*iterL1++);
else if (*iterL1 == *iterL2)
{
result.push_back(*iterL1);
iterL1++;
iterL2++;
}
else if (*iterL1 < *iterL2)
result.push_back(*iterL1++);
else if (*iterL1 > *iterL2)
result.push_back(*iterL2++);
}
return result;
}
int main()
{
list<char> L1,L2,L3;
int i=0;
char p;
cout<<"start input 5 elements for list L1:"<<endl;
for(i=0;i<5;i++)
{
cin>>p;
L1.push_back(p);
}
cout<<"end input for list L1"<<endl;
cout<<"start input 5 elements for list L2:"<<endl;
for(i=0;i<5;i++)
{
cin>>p;
L2.push_back(p);
}
cout<<"end input for list L2"<<endl;
L3=listUnion(L1,L2);
cout<<"the result of L1 union L2 :"<<endl;
for(list<char>::iterator itr=L3.begin();itr!=L3.end();itr++)
cout<<*itr<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数据结构
相关文章推荐