/**
* 實驗題目:
* 實現稀疏矩陣(採用三元組表示)的基本運算
* 實驗目的:
* 領會稀疏矩陣三元組的儲存結構及其基本演算法設計
* 實驗內容:
* 假設n x n的稀疏矩陣a採用三元組表示,設計乙個程式,實現如下功能:
* 1、生成如下兩個稀疏矩陣的三元組a和b。
* 1 0 3 0 3 0 0 0
* 0 1 0 0 0 4 0 0
* 0 0 1 0 0 0 1 0
* 0 0 1 1 0 0 0 2
* 2、輸出a轉置矩陣的三元組
* 3、輸出a+b的三元組
* 4、輸出axb的三元組
*/#include
#include
#define n 4
#define max_size 100 // 矩陣中非零元素最多個數
typedef int elemtype;
typedef struct
tupnode; // 三元組定義
typedef struct
tsmatrix; // 三元組順序表定義
/*------------------------產生稀疏矩陣a的三元組表示t----------------------*/
static void create_matrix(tsmatrix &t, elemtype a[n][n])}}
}/*------------------------輸出三元組表示t----------------------*/
static void disp_matrix(tsmatrix t)
/*------------------------求三元組表示t的轉置矩陣tb----------------------*/
/*** 轉置矩陣:
* 把矩陣a的行換成相應的列,得到的新矩陣稱為a的轉置矩陣。
*/static void tran_matrix(tsmatrix t, tsmatrix &tb)}}
}}/*------------------------求c=a+b----------------------*/
static bool matrix_add(tsmatrix a, tsmatrix b, tsmatrix &c) // 引用型別形參c
else if(a.data[i].c > b.data[j].c) // a元素的列號大於b元素的列號
else // a元素的列號等於b元素的列號
i++;
j++;}}
else if(a.data[i].r < b.data[j].r) // a元素的行號小於b元素的行號
else // a元素的行號大於b元素的行號
c.nums = k;
}return true;
}/*------------------------返回三元組t表示的a[i][j]值----------------------*/
static int get_value(tsmatrix t, int i, int j)
/*------------------------求c=a*b----------------------*/
static bool matrix_mul(tsmatrix a, tsmatrix b, tsmatrix &c) // 引用型別形參c
if(s != 0) // 產生乙個三元組元素}}
c.rows = a.rows;
c.cols = b.cols;
c.nums = p; // 矩陣c的非零元素個數
return true;
}int main(void),,
,};elemtype b1[n][n] = ,,,
};tsmatrix a, b, c;
create_matrix(a, a1);
create_matrix(b, b1);
printf("a的三元組:\n");
disp_matrix(a);
printf("b的三元組:\n");
disp_matrix(b);
printf("a轉置為c\n");
tran_matrix(a, c);
printf("c的三元組:\n");
disp_matrix(c);
printf("c=a+b\n");
matrix_add(a, b, c);
printf("c的三元組:\n");
disp_matrix(c);
printf("c=a*b\n");
matrix_mul(a, b, c);
printf("c的三元組:\n");
disp_matrix(c);
return 0;
}測試結果:
a的三元組:
4 4 6
------------------
0 0 1
0 2 3
1 1 1
2 2 1
3 2 1
3 3 1
b的三元組:
4 4 4
------------------
0 0 3
1 1 4
2 2 1
3 3 2
a轉置為c
c的三元組:
4 4 6
------------------
0 0 1
1 1 1
2 0 3
2 2 1
2 3 1
3 3 1
c=a+b
c的三元組:
4 4 6
------------------
0 0 4
0 2 3
1 1 5
2 2 2
3 2 1
3 3 3
c=a*b
c的三元組:
4 4 6
------------------
0 0 3
0 2 3
1 1 4
2 2 1
3 2 1
3 3 2
三元組表示稀疏矩陣並相加
要求稀疏矩陣用三元組結構儲存,實現矩陣a b c,並採用矩陣形式顯示結果。定義兩個結構體,triple結構體用來存放每乙個非零元素的資訊 行標,列標,數值 tripledata用來存放兩個三元組矩陣的資訊 行數,列數,非零元素的個數 每乙個三元組結構都需要呼叫這兩個結構體,兩個結構體共同組成乙個稀疏...
稀疏矩陣 三元組表示的矩陣相加減
設有採用三元組順序表儲存的兩個稀疏矩陣m和n,試著編寫乙個演算法,實現m和n相乘 1.標頭檔案 triseqmatrix.h 該資料夾中包含著三元稀疏矩陣的建立 初始化 轉置 銷毀等操作 pragma once include include define maxsize 200 typedef s...
稀疏矩陣三元組表示法的倒置
稀疏矩陣的概念及三元組表示法 如果乙個矩陣中的很多元素的值為零,即零元素的個數遠遠大於非零元素的個數時,稱該矩陣為稀疏矩陣。由於矩陣中零元素過多,若用一般方法對稀疏矩陣進行儲存會造成空間的大大浪費,因此,我們在儲存稀疏矩陣的時候,只需要對非零元素進行儲存。三元組表示法實際上就是乙個二維陣列,即將稀疏...