设有稀疏矩阵B如下图所示,请画出该稀疏矩阵 的三元组表和十字链表存储结构。 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -30 0 0 0 0 0 4 0 0 2 0 0 2 0 0 0 18 0 0 0 0 0 0 0 0 0 0 4 0 5 0 0 0 -3 0 0 0 0 0用C语言编写程序
时间: 2023-09-10 20:08:06 浏览: 122
三元组表的存储结构:
```
typedef struct {
int row;
int col;
int value;
} Triple;
Triple B[] = {
{1, 2, 3},
{3, 1, -30},
{3, 7, 4},
{4, 3, 2},
{4, 6, 2},
{5, 2, 18},
{6, 5, 4},
{6, 7, 5},
{7, 3, -3}
};
```
十字链表的存储结构:
```
typedef struct OLNode {
int row, col;
int value;
struct OLNode* right;
struct OLNode* down;
} OLNode;
OLNode* rowHead[7]; // 行指针数组
OLNode* colHead[8]; // 列指针数组
// 初始化十字链表
void initOL() {
// 初始化行指针数组
for (int i = 1; i <= 6; i++) {
rowHead[i] = (OLNode*) malloc(sizeof(OLNode));
rowHead[i]->row = i;
rowHead[i]->col = 0;
rowHead[i]->value = 0;
rowHead[i]->right = rowHead[i];
rowHead[i]->down = rowHead[i];
}
// 初始化列指针数组
for (int j = 1; j <= 7; j++) {
colHead[j] = (OLNode*) malloc(sizeof(OLNode));
colHead[j]->row = 0;
colHead[j]->col = j;
colHead[j]->value = 0;
colHead[j]->right = colHead[j];
colHead[j]->down = colHead[j];
}
// 构建十字链表
for (int k = 0; k < 9; k++) {
int i = B[k].row;
int j = B[k].col;
int v = B[k].value;
OLNode* node = (OLNode*) malloc(sizeof(OLNode));
node->row = i;
node->col = j;
node->value = v;
// 将节点插入到行链表中
OLNode* p = rowHead[i];
while (p->right != rowHead[i] && p->right->col < j) {
p = p->right;
}
node->right = p->right;
p->right = node;
// 将节点插入到列链表中
p = colHead[j];
while (p->down != colHead[j] && p->down->row < i) {
p = p->down;
}
node->down = p->down;
p->down = node;
}
}
```