#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 18:27:18 浏览: 7
这是一个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 <queue> #include <string> using namespace std;对代码进行注释
代码注释如下:
```c++
#include <iostream> // 引入输入输出流库
#include <queue> // 引入队列库
#include <string> // 引入字符串库
using namespace std; // 使用 std 命名空间
// 主函数
int main() {
queue<string> q; // 定义一个字符串队列 q
// 往队列中添加元素
q.push("apple");
q.push("banana");
q.push("orange");
// 输出队列头部元素
cout << q.front() << endl; // 输出:apple
// 弹出队列头部元素
q.pop();
// 输出队列头部元素
cout << q.front() << endl; // 输出:banana
// 输出队列中元素的个数
cout << "The size of the queue is " << q.size() << endl; // 输出:The size of the queue is 2
return 0; // 返回 0 表示程序正常结束
}
```
#include<iostream> #include<cstdio> using namespace std;是什么意思
#include<iostream> #include<cstdio> using namespace std; 是C++中的预处理指令,用于引入头文件和命名空间。
1. #include<iostream> 是引入iostream头文件,其中包含了输入输出流的定义,例如cout和cin等。
2. #include<cstdio> 是引入cstdio头文件,其中包含了C语言标准输入输出函数的定义,例如printf和scanf等。
3. using namespace std; 是使用std命名空间,std是C++标准库的命名空间,其中包含了很多常用的函数和类。
这些预处理指令的作用是为了在程序中能够使用输入输出流和标准库函数,使得程序更加方便和简洁。