⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sm1.cpp

📁 数据结构
💻 CPP
字号:
#include <stdio.h>
#define   max 20
void convert(int a[max][3],int a1[max][3])
{
int p,q,col;
a1[0][0]=a[0][1];
a1[0][1]=a[0][0];
a1[0][2]=a[0][2];
if(a1[0][2]!=0)
{
   q=1;
   for(col=1;col<=a[0][1];col++)
   for(p=1;p<=a[0][2];p++)
   if(a[p][1]==col)
    {
     a1[q][1]=a[p][0];
     a1[q][0]=a[p][1];
     a1[q][2]=a[p][2];
     q++;
    }
}
}
void add(int a[max][3],int b[max][3],int c[max][3])
{
int i=1,j=1,k=1;
while(i<=a[0][2]&&j<=b[0][2])
{
   if(a[i][0]==b[j][0])
   {
    if(a[i][1]<b[j][1])
    {
     c[k][0]=a[i][0];
     c[k][1]=a[i][1];
     c[k][2]=a[i][2];
     k++;
     i++;
    }
   else if(a[i][1]>b[j][1])
   {
    c[k][0]=b[j][0];
    c[k][1]=b[j][1];
    c[k][2]=b[j][2];
       k++;
       j++;
   }
   else
   {
    c[k][0]=b[j][0];
       c[k][1]=b[j][1];
       c[k][2]=a[i][2]+b[j][2];
       k++;
       i++;
       j++;
   }
}
   else if(a[i][0]<b[j][0])
   {
    c[k][0]=a[i][0];
       c[k][1]=a[i][1];
       c[k][2]=a[i][2];
       k++;
       i++;
   }
   else
   {
    c[k][0]=b[j][0];
       c[k][1]=b[j][1];
       c[k][2]=b[j][2];
       k++;
       j++;
   }
   c[0][0]=a[0][0];
   c[0][1]=a[0][1];
   c[0][2]=k-1;
   }
}

int value(int c[max][3],int i,int j)
{
int k=1;
     while(k<=c[0][2]&&!(c[k][0]==i&&c[k][1]==j))
         k++;
     if(c[k][0]==i&&c[k][1]==j)
     return(c[k][2]);
     else return(0);
}

void multi(int a[max][3],int b[max][3],int c[max][3])
{
int i,j,p,s,q;
     p=1;
for(i=1;i<=a[0][0];i++)
for(j=1;j<=b[0][1];j++)
{
   s=0;
   for(q=1;q<=a[0][1];q++)
   s=s+value(a,i,q)*value(b,q,j);
   if(s!=0)
   {
    c[p][0]=i;
    c[p][1]=j;
    c[p][2]=s;
    p++;
   }
}
c[0][0]=a[0][0];
c[0][1]=b[0][1];
c[0][2]=p-1;
}

void print(int a[max][3])
{
int i,j,t;
int aout[max+1][max+1];
for(i=1;i<=a[0][0];i++)
{
	for(j=1;j<=a[0][1];j++)
	{
		aout[i][j]=0;
	}
}
for(t=1;t<=a[0][2];t++)
{
	i=a[t][0];
	j=a[t][1];
	aout[i][j]=a[t][2];
}
for(i=1;i<=a[0][0];i++)
{
	for(j=1;j<=a[0][1];j++)
	{
		printf("%5d",aout[i][j]);
	}
	printf("\n");
}
}

void main()
{
int a[max][3],b[max][3],a1[max][3],b1[max][3],c[max][3],d[max][3];
int i,y;
printf("输入稀疏方阵A的行数,列数和非零元个数:");
scanf("%d,%d,%d",&a[0][0],&a[0][1],&a[0][2]);
for(i=1;i<=a[0][2];i++)
{
   printf("输入第%d个非0元素的行数,列数和值:",i);
   scanf("%d,%d,%d",&a[i][0],&a[i][1],&a[i][2]);
}
printf("输出A的阵列表示:\n");
print(a);
printf("\n输入稀疏方阵B的行数,列数和非零元个数:");
scanf("%d,%d,%d",&b[0][0],&b[0][1],&b[0][2]);
for(i=1;i<=b[0][2];i++)
{
   printf("输入第%d个非0元素的行数,列数和值:",i);
   scanf("%d,%d,%d",&b[i][0],&b[i][1],&b[i][2]);
}
printf("输出B的阵列表示:\n");
print(b);
printf("\n");
printf("=============   菜       单 ==============\n");
printf("                            1 A矩阵转置\n");
printf("                            2 B矩阵转置\n");
printf("                            3 C = A + B\n");
printf("                            4 D = A * B\n");
printf("======================================\n\n");
loop: printf("请选择相应操作的序号:");
scanf("%d",&y);
switch(y)
   {
   case 1: convert(a,a1);
    printf("输出A转置的阵列表示:\n");
    print(a1);
    printf("\n");
    goto loop;
   case 2: convert(b,b1);
    printf("输出B转置的阵列表示:\n");
    print(b1);
    printf("\n");
    goto loop;
   case 3: add(a,b,c);
    printf("输出C=A+B的阵列表示:\n");
    print(c);
    printf("\n");
   goto loop;
   case 4: multi(a,b,d);
    printf("输出D=A*B的阵列表示:\n");
    print(d);
    printf("\n");
   goto loop;
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -