用c++语言实现,稀疏矩阵用十字链表存储。编写代码:给定两个稀疏矩阵,求两个矩阵的和。
时间: 2024-10-10 11:04:47 浏览: 36
在C++中,我们可以使用十字链表(也称为压缩稀疏列,Compressed Sparse Column)来存储稀疏矩阵,因为这种方法对于非零元素密集的矩阵非常高效。这里是一个基本的框架,展示了如何求两个稀疏矩阵的和:
```cpp
#include <iostream>
#include <vector>
// 定义稀疏矩阵节点结构体
struct Node {
int value; // 节点值
int row; // 行索引
Node* next; // 下一个非零元素的指针
};
// 稀疏矩阵类
class SparseMatrix {
private:
std::vector<Node*> cols; // 每列的头部指针
public:
void insert(int row, int col, int val) {
if (val != 0) {
Node* newNode = new Node{val, row, nullptr};
if (!cols[col]) {
cols[col] = newNode;
} else {
Node* current = cols[col];
while (current->next && current->next->row < row) {
current = current->next;
}
if (current->row == row) {
newNode->next = current->next;
}
current->next = newNode;
}
}
}
SparseMatrix operator+(const SparseMatrix& other) const {
SparseMatrix result;
for (size_t i = 0; i < cols.size(); ++i) {
Node* firstCol = cols[i], *secondCol = other.cols[i];
Node* combined = nullptr;
while (firstCol && secondCol) {
if (firstCol->row < secondCol->row) {
result.insert(firstCol->row, i, firstCol->value);
firstCol = firstCol->next;
} else if (firstCol->row > secondCol->row) {
result.insert(secondCol->row, i, secondCol->value);
secondCol = secondCol->next;
} else { // 同行同列的元素相加
result.insert(firstCol->row, i, firstCol->value + secondCol->value);
firstCol = firstCol->next;
secondCol = secondCol->next;
}
}
// 将剩余的一个列添加到结果中
while (firstCol) {
result.insert(firstCol->row, i, firstCol->value);
firstCol = firstCol->next;
}
while (secondCol) {
result.insert(secondCol->row, i, secondCol->value);
secondCol = secondCol->next;
}
}
return result;
}
};
int main() {
SparseMatrix mat1;
// 插入矩阵A的元素...
SparseMatrix mat2;
// 插入矩阵B的元素...
SparseMatrix sum = mat1 + mat2;
// 打印结果矩阵的非零元素
for (size_t i = 0; i < sum.cols.size(); ++i) {
Node* current = sum.cols[i];
while (current) {
std::cout << "Row " << current->row << ", Col " << i << ": " << current->value << std::endl;
current = current->next;
}
}
return 0;
}
```
在这个例子中,`SparseMatrix` 类包含了插入元素和计算两个矩阵之和的操作。注意这只是一个简化的版本,实际应用中可能需要处理更多边界条件和优化。
阅读全文