广义表的转置c++函数
时间: 2024-06-14 08:05:28 浏览: 137
广义表的转置可以通过遍历原始广义表,将每个节点的行和列下标进行交换来实现。以下是一个示例的C++函数来实现广义表的转置:
```cpp
void transpose(CrossList &M, CrossList &T) {
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if (T.tu == 0) {
return;
}
// 创建列链表头
T.chead = new OLink[T.nu + 1];
for (int i = 1; i <= T.nu; i++) {
T.chead[i] = nullptr;
}
// 遍历原始广义表
for (int col = 1; col <= M.nu; col++) {
OLink p = M.chead[col];
while (p != nullptr) {
// 创建新节点
OLink q = new OLNode;
q->i = p->j;
q->j = p->i;
q->e = p->e;
// 插入到转置后的广义表中
if (T.chead[q->j] == nullptr || T.chead[q->j]->i > q->i) {
q->right = T.chead[q->j];
T.chead[q->j] = q;
} else {
OLink r = T.chead[q->j];
while (r->right != nullptr && r->right->i < q->i) {
r = r->right;
}
q->right = r->right;
r->right = q;
}
p = p->down;
}
}
}
```
这个函数接受两个参数,原始广义表M和转置后的广义表T。函数首先设置转置后广义表的行数、列数和非零元个数。然后创建列链表头,并遍历原始广义表,将每个节点的行和列下标进行交换,并插入到转置后的广义表中。
阅读全文