C語言 稀疏矩陣操作(三元組表示法)

2021-06-02 14:06:28 字數 2449 閱讀 1118

//稀疏矩陣例項

#include #define ok 1

#define error 0

#define true 1

#define false 0

#define maxsize 100

typedef int status;

typedef float elemtype;

typedef structtriple;

typedef structtsmatrix;

tsmatrix newmatrix(int m,int n);

//新建乙個三元組表示的稀疏矩陣

status insertelem(tsmatrix *m,int row,int col,elemtype e);

//在三元組表示的稀疏矩陣m,第 row 行,第 col 列位置插入元素e

//插入成功,返回ok,否則返回error

status findelem(const tsmatrix *m,int row,int col,elemtype *e);

//查詢三元組表示的稀疏矩陣m中,第 row 行,第 col列元素,若不為0,

//則用e返回其值,並返回true,否則返回false

status transposesmatrix(const tsmatrix *m,tsmatrix *t);

//採用三元組表儲存表示,求稀疏矩陣m的轉置矩陣t

status fasttransposesmatrix(const tsmatrix *m,tsmatrix *t);

//利用三元組順序表儲存表示,求稀疏矩陣m的轉置矩陣t

status multsmatrix(const tsmatrix *m,const tsmatrix *t,tsmatrix *q);

//稀疏矩陣的乘法,如果符合乘法規則,q返回m*t結果,並返回ok,否則返回error

void printsmatrix(const tsmatrix *m);

//列印稀疏矩陣所有元素

int main()

tsmatrix newmatrix(int m,int n)

status insertelem(tsmatrix *m,int row,int col,elemtype e)

if(row>m->mu||col>m->nu||row<1||col<1)

p=1;//標誌新元素應該插入的位置

if(m->tu==0)

for(t=1;t<=m->tu;t++)//尋找合適的插入位置

if((row>=m->data[t].i)&&(col>=m->data[t].j))

p++;

if(row==m->data[t-1].i && col==m->data[t-1].j)

for(i=m->tu;i>=p;i--)

//插入新元素

m->data[p].i=row;

m->data[p].j=col;

m->data[p].e=e;

m->tu++;

return ok;

}status findelem(const tsmatrix *m,int row,int col,elemtype *e)

return false;

}status transposesmatrix(const tsmatrix *m,tsmatrix *t)

}return ok;

}status fasttransposesmatrix(const tsmatrix *m,tsmatrix *t)

for(col=1;col<=m->nu;col++) num[col]=0;

//求m中每一列含有非零元素的個數

for(t=1;t<=m->tu;t++) ++num[m->data[t].j];

cpot[1]=1;

//求第col列中第乙個非零元素在b.data中的序號

for(col=2;col<=m->nu;col++)

cpot[col]=cpot[col-1]+num[col-1];

for(p=1;p<=m->tu;p++)//for

}//if

return ok;

}status multsmatrix(const tsmatrix *m,const tsmatrix *t,tsmatrix *q)

q->mu=m->mu; q->nu=t->nu; q->tu=0;

p=1;

for(i=1;i<=q->mu;i++)

if(s!=0)}}

return ok;

}void printsmatrix(const tsmatrix *m)

for(i=1;i<=m->mu;i++)else

}printf("\n");

}printf("\n");

}

執行結果演示:

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

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

三元組表示稀疏矩陣並相加

要求稀疏矩陣用三元組結構儲存,實現矩陣a b c,並採用矩陣形式顯示結果。定義兩個結構體,triple結構體用來存放每乙個非零元素的資訊 行標,列標,數值 tripledata用來存放兩個三元組矩陣的資訊 行數,列數,非零元素的個數 每乙個三元組結構都需要呼叫這兩個結構體,兩個結構體共同組成乙個稀疏...

稀疏矩陣 三元組表示的矩陣相加減

設有採用三元組順序表儲存的兩個稀疏矩陣m和n,試著編寫乙個演算法,實現m和n相乘 1.標頭檔案 triseqmatrix.h 該資料夾中包含著三元稀疏矩陣的建立 初始化 轉置 銷毀等操作 pragma once include include define maxsize 200 typedef s...