第6次数据结构上机(数组和广义表的基本运算实现)

来源:互联网 发布:js鼠标离开div 编辑:程序博客网 时间:2024/06/08 04:44

实验名称:数组和广义表的基本运算实现

指导教师:           王莹洁              

专业班级:       计163-1        

姓   名:      曹欣宇              

学   号:      201658503125            

电子邮件:  1552930561@qq.com          

实验地点:     计算机中心401          

实验成绩:                                  

 

日期: 2017 年  6月 9日

一、实验题目

假设n n的稀疏矩阵A采用三元组表示,设计一个程序exp6-4.cpp实现如下功能:

(1)生成如下两个稀疏矩阵的三元组a和b;

      

(2)输出a转置矩阵的三元组;

(3)输出a+b的三元组;

(4)输出a b的三元组。

二、实验目的

掌握稀疏矩阵的存储结构以及基本运算实现算法。

三、实验要求

针对程序exp6-4.cpp,输出结果如下:

 见运行图。

四、实验步骤

(包括基本设计思路、算法设计、函数相关说明、输入与输出以及程序运行结果)

基本设计思路:使用函数,使程序分块。

算法设计:先建立三元组结构体,然后根据矩阵中元素是否为0,将矩阵中元素改为三元组表示,矩阵转置时,只需将三元组中行列互换即可。矩阵的加法和乘法使用矩阵运算规则计算,然后调用建立和输出三元组的函数即可。

函数相关说明:void creatmat(tsmatrix&t,int a[M][N])//创建三元组

void dispmat(tsmatrix t)//输出三元组

void trantat(tsmatrixt,tsmatrix &tb)//矩阵转置(三元组表示)

void jia(int a[M][N],intb[M][N],int c[M][N])//矩阵的加法函数

void cheng(int a[M][N],intb[M][N],int c[M][N])//矩阵的乘法函数

输入:无。

输出:见运行图。

运行结果:



五、实验心得体会

通过实验,掌握了矩阵三元组的表示方法,复习了矩阵的相关运算。

 

六、源程序清单(代码)

#include <iostream>#include <stdio.h>#include <stdlib.h>#define M 4#define N 4#define maxsize 80using namespace std;typedef struct{    int r;    int c;    int d;} tupnode;typedef struct{    int rows;    int cols;    int nums;    tupnode data[maxsize];} tsmatrix;void creatmat(tsmatrix &t,int a[M][N]){    int i,j;    t.rows=M;    t.cols=N;    t.nums=0;    for(i=0; i<M; i++)        for(j=0; j<N; j++)            if(a[i][j]!=0)            {                t.data[t.nums].r=i;                t.data[t.nums].c=j;                t.data[t.nums].d=a[i][j];                t.nums++;            }}void dispmat(tsmatrix t){    int i;    printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);    printf("\t--------------------\n");    for(i=0; i<t.nums; i++)        printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);}void trantat(tsmatrix t,tsmatrix &tb){    int p,q=0;    int v;    tb.rows=t.cols;    tb.cols=t.rows;    tb.nums=t.nums;    if(t.nums!=0)    {        for(v=0; v<t.cols; v++)            for(p=0; p<t.nums; p++)                if(t.data[p].c==v)                {                    tb.data[q].r=t.data[p].c;                    tb.data[q].c=t.data[p].r;                    tb.data[q].d=t.data[p].d;                    q++;                }    }}void jia(int a[M][N],int b[M][N],int c[M][N]){    int i,j;    for(i=0; i<M; i++)        for(j=0; j<N; j++)        {            c[i][j]=a[i][j]+b[i][j];        }}void cheng(int a[M][N],int b[M][N],int c[M][N]){    int i,j,k,s;    for (i=0; i<2; i++)        for (j=0; j<4; j++)        {            s=0;            for (k=0; k<3; k++)                s+=a[i][k]*b[k][j];            c[i][j]=s;        }}int main(){    int a[M][N]= {{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};    int b[M][N]= {{3,0,0,0},{0,4,0,0},{0,0,1,0},{0,0,0,2}};    int c[M][N];    tsmatrix A,B,C;    creatmat(A,a);    creatmat(B,b);    printf("a的三元组:\n");    dispmat(A);    printf("b的三元组:\n");    dispmat(B);    printf("a的转置为c\n");    printf("c的三元组:\n");    trantat(A,C);    dispmat(C);    printf("c=a+b\n");    printf("c的三元组:\n");    jia(a,b,c);    creatmat(C,c);    dispmat(C);    printf("c=a*b\n");    printf("c的三元组:\n");    cheng(a,b,c);    creatmat(C,c);    dispmat(C);    return 0;}



阅读全文
0 0