C语言编写稀疏矩阵的加,减,乘和转置,要求用矩阵输出

C语言编写稀疏矩阵的加,减,乘和转置,要求用矩阵输出,第1张

#include <stdio.h>

#include <iostream>

#include <math.h>

#include <stdlib.h>

using namespace std

#define Max 12500

#define Elemtype int

typedef struct {

int i ,j

Elemtype e

}Triple

typedef struct {

Triple data[Max+1]

int mu,nu,tu

}Tsmatrix

int Createsmatrix(Tsmatrix &M)

{ int n

cout<<"请输入稀疏矩阵的元素个数n"<<endl

cin>>n

M.tu=n

cout<<"请输入稀疏矩阵的行数,列数:"<<辩物endl

cin>圆搜>M.mu>>M.nu

int i

for(i=1i<=ni++){

cout<<"请输入稀疏矩阵的行下标和列下标,及数据"<<endl

cin>携腔液>M.data[i].i>>M.data[i].j>>M.data[i].e

}

return 1

}

int Transpose(Tsmatrix M , Tsmatrix &T)

{

T.mu=M.nuT.nu=M.mu T.tu=M.tu

if(T.tu){

int col , p , q=1

for(col=1col<=M.nu++col)

for(p=1p<=M.tu++p)

if (M.data[p].j==col){

T.data[q].i=M.data[p].jT.data[q].j=M.data[p].i

T.data[q].e=M.data[p].e ++q}

}

return 1

}

int Print(Tsmatrix M)

{

int iint p=1

{

for (i=1i<=M.mu*M.nui++)

if(i==((M.data[p].i-1)*M.nu+M.data[p].j))

{

if(M.data[p].j==M.nu)

{ cout<<M.data[p].e<<endlp++}

else

{ cout<<M.data[p].e<<" "p++}

}

else if(i%M.nu==0) cout<<"0"<<endl

else cout<<"0 "

}

cout<<"\n"<<endl

return 1

}

int Addsmatrix(Tsmatrix a, Tsmatrix b, Tsmatrix &c)

{

int s=1,t=1,k=1Elemtype temp

if(a.mu!=b.mu||a.nu!=b.nu) return 0

if(a.tu == 0) {c=breturn 1}

if(b.tu==0) {c=areturn 1}

if(a.tu==0 &&b.tu==0) { c=areturn 1}

while(!(s>a.tu &&t>b.tu))

{

if(a.data[s].i>b.data[t].i)

{

c.data[k]=b.data[t]

k++ t++

}

if(a.data[s].i<b.data[t].i)

{

c.data[k]=a.data[s]

k++ s++

}

if(a.data[s].i==b.data[t].i)

{

if(a.data[s].j>b.data[t].j)

{

c.data[k]=b.data[t]

k++t++

}

if(a.data[s].j<b.data[t].j)

{

c.data[k]=a.data[s]

k++s++

}

if(a.data[s].j==b.data[t].j)

{

temp=a.data[s].e+b.data[t].e

if(temp==0){s++t++}

else

{ c.data[k].e=tempc.data[k].i=a.data[s].ic.data[k].j=a.data[s].j

s++t++k++

}

}

}//if

if(s>a.tu&&t<=b.tu)

{

while(t<=b.tu)

{

c.data[k]=b.data[t]

k++t++

}

}

if(t>b.tu&&s<=a.tu)

{

while(s<=a.tu)

{

c.data[k]=a.data[s]

k++s++

}

}

}//while

c.tu=k-1c.mu=a.muc.nu=a.nu

}

return 1int main()

{

Tsmatrix a,b,c

Createsmatrix( a)

Createsmatrix( b)

Print(a)

Print(b)

Addsmatrix(a,b,c)

Print(c)

return 1

}

这个程序能实现矩阵的加减乘。

从中删除你不需要的部分你会吧。

#include<iostream.h>

#include<malloc.h>

#define TRUE 1

#define ERROR 0

#define OK 1

#define MAXISIZE 100

typedef int Elemtype

typedef int Status

struct Triple

{

int i,j//行下标,列下标

Elemtype e //非零元数的值

}

struct TSMatrix

{

Triple data[MAXISIZE+1]

int mu,nu,tu //矩阵的行数,列数,非零元数

}

Status CreateSMatrix(TSMatrix &M)

{

int i,m,n

Elemtype e

Status k

cout<<"输入矩阵的行数,列数,非零元数:\n"

cin>>M.mu>>M.nu>>M.tu

M.data[0].i=0

for(i=1i<=M.tui++)

{

do

{

cout<<"输入第"<<i<<"个非零元素所在的行槐州扒(1~"<<M.mu<<"),列(1~"<<M.nu<<"),元素值:\n"

cin>>m>>n>>e

k=0

if(m<1||m>迹举M.mu||n<1||n>M.nu)

{ k=1

cout<<"元素的行列数输入错误!\n"}

if(m<M.data[i-1].i||m==M.data[i-1].i&&n<=M.data[i-1].j)

k=1

}while(k)

M.data[i].i=m

M.data[i].j=n

M.data[i].e=e

}

return OK

}

void DestroySMatrix(TSMatrix &M)

{

M.mu=0

M.nu=0

M.tu=0

}

void PrintSMatrix(TSMatrix M)

{

int i

cout<<M.mu<<"行"<<M.nu<<"列"<<M.tu<<"个非零元数\n"

cout<<"行 列 元素值\n"

for(i=1i<铅昌=M.tui++)

cout<<M.data[i].i<<" "<<M.data[i].j<<" "<<M.data[i].e<<endl

}

Status Cmp(int a,int b)

{ if(a<b) return 1

else if(a==b) return 0

else return -1

}

Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)

{

Triple *Mp,*Me,*Np,*Ne,*Qh,*Qe

if(M.mu!=N.mu||M.nu!=N.nu)

return ERROR

Q.mu=M.mu

Q.nu=M.nu

Mp=&M.data[1]

Np=&N.data[1]

Me=&M.data[M.tu]

Ne=&N.data[N.tu]

Qh=Qe=Q.data

while(Mp<=Me&&Np<=Ne)

{ Qe++

switch(Cmp(Mp->i,Np->i))

{

case 1: *Qe=*Mp

Mp++

break

case 0: switch(Cmp(Mp->j,Np->j))

{

case 1: *Qe=*Mp

Mp++

break

case 0: *Qe=*Mp

Qe->e+=Np->e

if(!Qe->e)

Qe--

Mp++

Np++

break

case -1: *Qe=*Np

Np++

}

break

case -1: *Qe=*Np

Np++

}

}

if(Mp>Me)

while(Np<=Ne)

{

Qe++

*Qe=*Np

Np++

}

if(Np>Ne)

while(Mp<=Me)

{

Qe++

*Qe=*Mp

Mp++

}

Q.tu=Qe-Qh

return OK

}

Status SubSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)

{

int i,l

for(i=1i<=N.tui++)

N.data[i].e*=-1

l=AddSMatrix(M,N,Q)

return l

}

Status MultSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)

{

int i,j,h=M.mu,l=N.nu,Qn=0

Elemtype *Qe

if(M.nu!=N.mu)

return ERROR

Q.mu=M.mu

Q.nu=N.nu

Qe=(Elemtype *)malloc(h*l*sizeof(Elemtype))

for(i=0i<h*li++)

*(Qe+i)=0

for(i=1i<=M.tui++)

for(j=1j<=N.tuj++)

if(M.data[i].j==N.data[j].i)

*(Qe+(M.data[i].i-1)*l+N.data[j].j-1)+=M.data[i].e*N.data[j].e

for(i=1i<=M.mui++)

for(j=1j<=N.nuj++)

if(*(Qe+(i-1)*l+j-1)!=0)

{

Qn++

Q.data[Qn].e=*(Qe+(i-1)*l+j-1)

Q.data[Qn].i=i

Q.data[Qn].j=j

}

free(Qe)

Q.tu=Qn

return OK

}

void main()

{char a

int h

TSMatrix A,B,C

cout<<"创建矩阵A:\n"

CreateSMatrix(A)

PrintSMatrix(A)

cout<<"创建矩阵B:\n"

CreateSMatrix(B)

PrintSMatrix(B)

cout<<"选择 *** 作:\n"<<"A.两稀疏矩阵的和\n"<<"B.两稀疏矩阵的差\n"<<"C.两稀疏矩阵的积\n"<<"Q.退出\n"

cin>>a

while(a!='Q')

{

switch(a)

{

case 'A':

h=AddSMatrix(A,B,C)

if(h==1)

{cout<<"两稀疏矩阵的和为:\n"

PrintSMatrix(C)

}

else cout<<"该两稀疏矩阵不能求和!\n"

break

case 'B':

h=SubSMatrix(A,B,C)

if(h==1)

{ cout<<"两稀疏矩阵的差为:\n"

PrintSMatrix(C)

}

else cout<<"该两稀疏矩阵不能求差!\n"

break

case 'C':

h=MultSMatrix(A,B,C)

if(h==1)

{cout<<"两稀疏矩阵的积为:\n"

PrintSMatrix(C)

}

else cout<<"两稀疏矩阵不能求积!\n"

break

default: cout<<"输入错误!请重新输入\n"

}cin>>a

}DestroySMatrix(A)

DestroySMatrix(B)

DestroySMatrix(C)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12247996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存