下面是一个示例代码,展示了如何实现一个包含结构体的结构体的自由链表:
#include
struct InnerStruct {
int innerData;
};
struct OuterStruct {
int outerData;
InnerStruct* innerStructPtr;
OuterStruct* next;
};
OuterStruct* createOuterStruct(int outerData, int innerData) {
OuterStruct* newOuterStruct = new OuterStruct;
newOuterStruct->outerData = outerData;
InnerStruct* newInnerStruct = new InnerStruct;
newInnerStruct->innerData = innerData;
newOuterStruct->innerStructPtr = newInnerStruct;
newOuterStruct->next = nullptr;
return newOuterStruct;
}
void deleteOuterStruct(OuterStruct* outerStruct) {
delete outerStruct->innerStructPtr;
delete outerStruct;
}
int main() {
// 创建自由链表的头节点
OuterStruct* head = createOuterStruct(1, 10);
// 创建新的节点并添加到链表末尾
OuterStruct* newOuterStruct = createOuterStruct(2, 20);
head->next = newOuterStruct;
// 遍历链表并打印每个节点的数据
OuterStruct* currentNode = head;
while (currentNode != nullptr) {
std::cout << "Outer Data: " << currentNode->outerData << std::endl;
std::cout << "Inner Data: " << currentNode->innerStructPtr->innerData << std::endl;
std::cout << std::endl;
currentNode = currentNode->next;
}
// 删除链表的所有节点
currentNode = head;
while (currentNode != nullptr) {
OuterStruct* nextNode = currentNode->next;
deleteOuterStruct(currentNode);
currentNode = nextNode;
}
return 0;
}
在这个示例中,我们定义了两个结构体:InnerStruct
和OuterStruct
。OuterStruct
包含一个整数数据outerData
、一个指向InnerStruct
的指针innerStructPtr
,以及一个指向下一个OuterStruct
的指针next
。InnerStruct
包含一个整数数据innerData
。
我们使用createOuterStruct()
函数创建一个新的OuterStruct
节点,并为其分配内存。在该函数中,我们还创建一个新的InnerStruct
节点,并将其指针赋值给OuterStruct
节点的innerStructPtr
成员变量。最后,我们将该节点添加到链表的末尾。
在main()
函数中,我们首先创建链表的头节点,并将其指针赋值给head
变量。然后,我们创建一个新的OuterStruct
节点,并将其指针赋值给head->next
,这样就将新节点添加到链表的末尾。
接下来,我们使用一个循环遍历链表,并打印每个节点的数据。最后,我们使用另一个循环删除链表的所有节点,并释放内存。
这是一个简单的示例,用于展示如何实现一个包含结构体的结构体的自由链表。实际应用中,可能会有更多的操作和功能。
下一篇:包含接口作为参数的方法