#include <iostream>using namespace std;// 定义广义表节点struct ListNode { int tag; // 节点类型,0表示原子类型,1表示广义表类型 union { int atom; // 原子类型的值 ListNode* subList; // 广义表类型的头节点指针 } value; ListNode* next; // 下一个节点指针};// 创建一个原子节点ListNode* createAtom(int atom) { ListNode* node = new ListNode(); node->tag = 0; node->value.atom = atom; node->next = nullptr; return node;}// 创建一个广义表节点ListNode* createSubList(ListNode* subList) { ListNode* node = new ListNode(); node->tag = 1; node->value.subList = subList; node->next = nullptr; return node;}// 打印广义表void printList(ListNode* node) { if (node == nullptr) { cout << "空表" << endl; return; } cout << "("; while (node) { if (node->tag == 0) { cout << node->value.atom; } else { printList(node->value.subList); } node = node->next; if (node) { cout << ","; } } cout << ")";}int main() { // 创建广义表 (1,2,(3,4),5) ListNode* node1 = createAtom(1); ListNode* node2 = createAtom(2); ListNode* node3 = createAtom(3); ListNode* node4 = createAtom(4); ListNode* node5 = createAtom(5); ListNode* node6 = createSubList(node3); ListNode* node7 = createSubList(node4); node6->next = node7; ListNode* head = node1; head->next = node2; node2->next = node6; node6->next = node5; // 打印广义表 printList(head); return 0;}
时间: 2024-04-20 12:27:18 浏览: 67
这是一个C++程序,用于创建和打印广义表。
程序中定义了一个广义表节点结构体ListNode,其中包含三个成员变量:
- tag:节点类型,0表示原子类型,1表示广义表类型;
- value:节点的值,如果是原子类型,则为atom(整数类型),如果是广义表类型,则为subList(指向头节点的指针);
- next:指向下一个节点的指针。
程序中定义了两个函数createAtom和createSubList,用于创建原子节点和广义表节点。
createAtom函数接收一个整数参数,并创建一个tag为0的节点,将参数作为该节点的值,最后返回该节点的指针。
createSubList函数接收一个指向头节点的指针参数,并创建一个tag为1的节点,将参数作为该节点的值,最后返回该节点的指针。
程序中还定义了一个打印广义表的函数printList,该函数接收一个指向广义表头节点的指针,遍历整个广义表,如果节点是原子类型,则打印该节点的值,如果节点是广义表类型,则递归打印子表。
程序的主函数main中,通过调用createAtom和createSubList函数,创建了一个广义表 (1,2,(3,4),5),最后调用printList函数打印该广义表。
注意:在程序结束前应该释放动态分配的内存,否则可能会导致内存泄漏。
相关问题
#include <iostream> #include <stdlib.h> using namespace std; class listNode { public: char data; // each listNode contains a character struct listNode *nextPtr; // pointer to next node typedef class listNode ListNode; // synonym for struct listNode
你的第一个问题是一个代码片段,是吗?那我猜测你想问的是,这段代码是用来干什么的?
这段代码定义了一个名为"listNode"的类,该类包含一个字符数据成员和一个指向下一个节点的指针。此外,类中还定义了一个名为"ListNode"的同义词,用于表示结构体"listNode"。这个类可以用来创建一个链表数据结构。
阅读全文