已知一稀疏矩阵(稀疏矩阵自己定义),试写出该稀疏矩阵的三元组顺序表和三元组单链表
时间: 2024-02-06 08:10:19 浏览: 85
数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现.doc
稀疏矩阵是指矩阵中大部分元素都是零的矩阵,可以用三元组表示。
三元组表示法包括三个信息:非零元素所在的行、列和元素值。三元组顺序表和三元组单链表都是一种存储稀疏矩阵的方法,区别在于存储结构不同。
以下是一个稀疏矩阵的示例:
```
0 0 0 0 0
0 0 0 8 0
0 0 0 0 0
0 0 6 0 0
```
该矩阵共有三个非零元素,可以用三元组表示为:
```
(1, 3, 8)
(3, 2, 6)
(4, 3, 2)
```
其中,第一个元素表示行号,第二个元素表示列号,第三个元素表示值。
三元组顺序表是一种利用顺序表存储稀疏矩阵的方法,它将每个非零元素存储在一个三元组结构中,然后将这些结构按照行优先顺序依次存储在一维数组中。三元组顺序表的定义如下:
```c
#define MAXSIZE 100 // 假设非零元素个数的最大值为100
typedef struct {
int i, j; // 行号和列号
int value; // 值
} Triple;
typedef struct {
Triple data[MAXSIZE + 1]; // 存储三元组的一维数组,data[0]未用
int rows, cols, num; // 矩阵的行数、列数和非零元素个数
} TSMatrix;
```
三元组单链表是一种利用链表存储稀疏矩阵的方法,它将每个非零元素存储在一个三元组结构中,然后将这些结构按照行优先顺序链接成一个链表。三元组单链表的定义如下:
```c
typedef struct TripleNode {
int i, j; // 行号和列号
int value; // 值
struct TripleNode *next; // 指向下一个节点的指针
} TripleNode;
typedef struct {
TripleNode *head; // 指向三元组单链表头节点的指针
int rows, cols, num; // 矩阵的行数、列数和非零元素个数
} TripleList;
```
对于上面的示例矩阵,它们的三元组顺序表和三元组单链表分别为:
```c
// 三元组顺序表
TSMatrix M = {
.data = {
{0, 0, 0}, // data[0]未用
{1, 3, 8},
{3, 2, 6},
{4, 3, 2}
},
.rows = 4,
.cols = 5,
.num = 3
};
// 三元组单链表
TripleNode n3 = {4, 3, 2, NULL};
TripleNode n2 = {3, 2, 6, &n3};
TripleNode n1 = {1, 3, 8, &n2};
TripleList L = {
.head = &n1,
.rows = 4,
.cols = 5,
.num = 3
};
```
阅读全文