C++本科生导师制广义表代码实现,包含插入,删除,查询,输出功能
时间: 2023-09-24 20:05:41 浏览: 59
以下是一个简单的C++广义表的实现,包括插入、删除、查询和输出功能。该广义表使用链表实现。
```cpp
#include <iostream>
using namespace std;
// 定义广义表的节点结构体
struct Node {
char data; // 数据域
Node* next; // 指针域
Node* sublist; // 子表指针
Node(char d) : data(d), next(nullptr), sublist(nullptr) {}
};
// 定义广义表类
class GeneralizedList {
public:
GeneralizedList() : head(nullptr) {}
// 插入元素
void insert(char data) {
Node* node = new Node(data);
if (head == nullptr) {
head = node;
} else {
Node* p = head;
while (p->next != nullptr) {
p = p->next;
}
p->next = node;
}
}
// 插入子表
void insertSublist(GeneralizedList& sublist) {
Node* node = new Node('('); // 子表用括号包含
node->sublist = sublist.head;
if (head == nullptr) {
head = node;
} else {
Node* p = head;
while (p->next != nullptr) {
p = p->next;
}
p->next = node;
}
}
// 删除元素
void remove(char data) {
if (head == nullptr) return;
if (head->data == data) {
Node* p = head;
head = head->next;
delete p;
} else {
Node* p = head;
while (p->next != nullptr && p->next->data != data) {
p = p->next;
}
if (p->next != nullptr) {
Node* q = p->next;
p->next = q->next;
delete q;
}
}
}
// 删除子表
void removeSublist() {
if (head == nullptr) return;
if (head->sublist != nullptr) {
Node* p = head;
head = head->next;
delete p->sublist;
delete p;
} else {
Node* p = head;
while (p->next != nullptr && p->next->sublist == nullptr) {
p = p->next;
}
if (p->next != nullptr) {
Node* q = p->next;
p->next = q->next;
delete q->sublist;
delete q;
}
}
}
// 查询元素
bool search(char data) {
Node* p = head;
while (p != nullptr) {
if (p->data == data) {
return true;
} else if (p->sublist != nullptr) {
if (p->sublist->search(data)) {
return true;
}
}
p = p->next;
}
return false;
}
// 输出广义表
void print() {
if (head == nullptr) {
cout << "()";
return;
}
cout << '(';
Node* p = head;
while (p != nullptr) {
if (p->sublist != nullptr) {
p->sublist->print();
} else {
cout << p->data;
}
if (p->next != nullptr) {
cout << ',';
}
p = p->next;
}
cout << ')';
}
private:
Node* head; // 头指针
};
int main() {
// 创建广义表(1,2,(3,4),5)
GeneralizedList list;
list.insert('1');
list.insert('2');
GeneralizedList sublist;
sublist.insert('3');
sublist.insert('4');
list.insertSublist(sublist);
list.insert('5');
// 输出广义表
list.print();
cout << endl;
// 删除子表
list.removeSublist();
// 输出广义表
list.print();
cout << endl;
// 查询元素
cout << "查询元素 4 是否存在: " << (list.search('4') ? "存在" : "不存在") << endl;
// 删除元素
list.remove('5');
// 输出广义表
list.print();
cout << endl;
return 0;
}
```
输出结果为:
```
(1,2,(3,4),5)
(1,2,5)
查询元素 4 是否存在: 存在
(1,2)
```