c++采用链式存储结构实现两集合的并集、交集、差集运算代码
时间: 2024-10-19 20:03:23 浏览: 46
C++中可以使用链表数据结构(如`std::list`)来实现不固定大小的集合,并通过指针连接元素来表示集合中的元素。这里是一个简单的例子,我们将创建两个`Set`类,分别使用`std::list`作为底层存储结构,来实现并集、交集和差集的操作:
```cpp
#include <iostream>
#include <list>
template <typename T>
class Set {
private:
std::list<T> elements;
public:
// 添加元素
void insert(T value) {
elements.push_back(value);
}
// 查看是否包含元素
bool contains(const T& value) const {
return std::find(elements.begin(), elements.end(), value) != elements.end();
}
// 并集操作
friend Set<T> union_set(const Set<T>& set1, const Set<T>& set2) {
Set<T> result(set1);
for (const auto& element : set2) {
if (!result.contains(element)) {
result.insert(element);
}
}
return result;
}
// 交集操作
friend Set<T> intersection(const Set<T>& set1, const Set<T>& set2) {
Set<T> result;
for (const auto& element : set1) {
if (set2.contains(element)) {
result.insert(element);
}
}
return result;
}
// 差集操作
friend Set<T> difference(const Set<T>& set1, const Set<T>& set2) {
Set<T> result(set1);
for (auto it = set2.begin(); it != set2.end();) {
if (result.contains(*it)) {
it = set2.erase(it);
} else {
++it;
}
}
return result;
}
};
// 示例
int main() {
Set<int> s1 = {1, 2, 3};
Set<int> s2 = {2, 4, 5};
Set<int> unionResult = union_set(s1, s2); // [1, 2, 3, 4, 5]
Set<int> intersectResult = intersection(s1, s2); // [2]
Set<int> diffResult = difference(s1, s2); // [1, 3]
// 打印结果
std::cout << "Union: ";
for (const auto& elem : unionResult.elements) {
std::cout << elem << " ";
}
std::cout << "\nIntersection: ";
for (const auto& elem : intersectResult.elements) {
std::cout << elem << " ";
}
std::cout << "\nDifference: ";
for (const auto& elem : diffResult.elements) {
std::cout << elem << " ";
}
std::cout << "\n";
return 0;
}
```
这个示例展示了如何通过链式存储结构实现基本的集合操作。注意这只是一个简化版本,实际应用中可能需要添加更多的错误检查和性能优化。
阅读全文