實現稀疏矩陣 採用三元組表示 的基本運算

2021-09-10 03:56:16 字數 3574 閱讀 1556

/**

*    實驗題目:

*        實現稀疏矩陣(採用三元組表示)的基本運算

*    實驗目的:

*        領會稀疏矩陣三元組的儲存結構及其基本演算法設計

*    實驗內容:

*        假設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...

稀疏矩陣三元組表示法的倒置

稀疏矩陣的概念及三元組表示法 如果乙個矩陣中的很多元素的值為零,即零元素的個數遠遠大於非零元素的個數時,稱該矩陣為稀疏矩陣。由於矩陣中零元素過多,若用一般方法對稀疏矩陣進行儲存會造成空間的大大浪費,因此,我們在儲存稀疏矩陣的時候,只需要對非零元素進行儲存。三元組表示法實際上就是乙個二維陣列,即將稀疏...