用c++编写一个程序,基于单链表实现集合的交运算,假设集合A={c a e h},集合B={f h b g d a},将结果输出到屏幕上。(设计性实验)
时间: 2024-09-18 21:19:10 浏览: 56
为了在C++中使用单链表实现集合的交运算,我们可以创建两个链表,分别存储集合A和集合B的元素,并遍历它们找出共同的部分。这里是一个简单的实现示例:
```cpp
#include <iostream>
#include <string>
// 单链表节点结构体
struct ListNode {
std::string value;
ListNode* next;
};
// 创建链表节点
ListNode* createNode(std::string val) {
ListNode* node = new ListNode();
node->value = val;
node->next = nullptr;
return node;
}
// 添加元素到链表
void addToList(ListNode*& head, std::string val) {
ListNode* newNode = createNode(val);
if (head == nullptr) {
head = newNode;
} else {
ListNode* curr = head;
while (curr->next != nullptr) {
curr = curr->next;
}
curr->next = newNode;
}
}
// 遍历链表并打印元素
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->value << " ";
temp = temp->next;
}
std::cout << std::endl;
}
// 计算交集并将结果添加到新的链表
ListNode* computeIntersection(ListNode* listA, ListNode* listB) {
ListNode* resultHead = nullptr;
ListNode* AIt = listA;
ListNode* BIt = listB;
while (AIt != nullptr && BIt != nullptr) {
if (AIt->value == BIt->value) {
addToList(resultHead, AIt->value); // 如果值相同,将其添加到结果链表
}
if (AIt->value > BIt->value) {
BIt = BIt->next;
} else {
AIt = AIt->next;
}
}
return resultHead;
}
int main() {
// 初始化集合A和B
ListNode* listA = nullptr;
addToList(listA, "c");
addToList(listA, "a");
addToList(listA, "e");
addToList(listA, "h");
ListNode* listB = nullptr;
addToList(listB, "f");
addToList(listB, "h");
addToList(listB, "b");
addToList(listB, "g");
addToList(listB, "d");
addToList(listB, "a");
// 计算交集
ListNode* intersectionList = computeIntersection(listA, listB);
// 打印结果
std::cout << "交集: ";
printList(intersectionList);
return 0;
}
```
这个程序首先创建了两个链表`listA`和`listB`,然后通过`computeIntersection`函数计算它们的交集。最后,`printList`函数将结果打印出来。
阅读全文