第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;}
- 第6次数据结构上机(数组和广义表的基本运算实现)
- 数据结构 - 数组和广义表的基本运算实现
- 第7次数据结构上机--树和二叉树的基本运算实现
- 数组和广义表的基本运算实现
- 数组和广义表的基本运算实现(三元组)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(多维数组的基本操作)
- 基本数据结构(数组、串、广义表)
- 数据结构--数组和广义表--以行逻辑链接的顺序表为存储结构的矩阵的基本运算(求矩阵乘积)
- 实现广义表的基本运算
- 2015年大二上-数据结构-数组与广义表(2)-1.对称矩阵的压缩存储及基本运算
- 第九周 数据结构实现项目--数组和广义表【项目2.2 - 压缩存储的对称矩阵的运算】
- 数据结构(五) 数组和广义表
- 数据结构 第4章 数组和广义表
- 【数据结构】第5章 数组和广义表
- 数组和广义表 - [数据结构]
- 数据结构,数组和广义表
- [数据结构]数组和广义表
- 【数据结构】数组和广义表
- LTE网络-PCI规划
- cookie安全性设置的注意事项
- eclipse中SVN插件site包下载地址
- Deep Learning(深度学习)学习笔记整理系列之(一)
- 一个最小堆简单定时器的实现demo
- 第6次数据结构上机(数组和广义表的基本运算实现)
- iOS:NO suitable application records were found.Verify your bundle identifier 'com***'is correct
- CSS复合样式用selenium定位xpath写法(用contain text()方法)
- 移动端图片格式调研
- Centos6.5安装配置NTP时间服务器
- Centos7安装使用libvirt
- 内部类
- 从高考到程序员,一生无悔的选择,码农的成长之路
- android调试