数据结构实验数制转置.docx
- 文档编号:24095246
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:9
- 大小:27.46KB
数据结构实验数制转置.docx
《数据结构实验数制转置.docx》由会员分享,可在线阅读,更多相关《数据结构实验数制转置.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构实验数制转置
数组和广义表
班级:
计科092姓名:
李永伟学号:
0908060065完成日期:
2011.5.28
题目:
数组转置
题目描述:
存在稀疏矩阵A,编写程序将A转置为B。
基本要求:
用三元组表示稀疏矩阵,应用算法5.2完成转置
一、需求分析
功能:
求一个用三元组表示的矩阵的转置矩阵
输入:
矩阵的行数、列数、非零元的个数、非零元对应的行下标和列下标
输出:
转置后的矩阵
二、概要设计
有题目要求知,需要建立一个三元组的结构体,和转置的函数;由此可以得到需要以下几个模块
模块:
1.三元组表示的结构体
2.快速转置的函数
大概算法:
模块2:
先求出每一列所含非零元的个数,然后找出每一列第一个存储的位置依次进行转置
三、详细设计
1.结构体定义:
typedefstruct
{
inti;
intj;
intelem;
}triple;
typedefstruct
{
tripledata[100];
intmu;
intnu;
inttu;
}TsMatrix;
2.快速转置算法
voidfastTransposeSMatrix(TsMatrixone,TsMatrix*two)
{intm;
intcpot[101];
intnum[101];
two->mu=one.nu;
two->nu=one.mu;
two->tu=one.tu;
if(two->tu)
{
for(m=1;m { num[m]=0; } for(m=1;m<=one.tu;++m) { ++num[one.data[m].j]; } cpot[1]=1; for(m=2;m<=one.nu;++m) { cpot[m]=cpot[m-1]+num[m-1]; } for(m=1;m<=one.tu;m++) { intcol=one.data[m].j; intq=cpot[col]; two->data[q].i=one.data[q].j; two->data[q].j=one.data[q].i; two->data[q].elem=one.data[q].elem; ++cpot[col]; } } return; }1.结构体定义: typedefstruct { inti; intj; intelem; }triple; typedefstruct { tripledata[100]; intmu; intnu; inttu; }TsMatrix; 2.快速转置算法 voidfastTransposeSMatrix(TsMatrixone,TsMatrix*two) {intm; intcpot[101]; intnum[101]; two->mu=one.nu; two->nu=one.mu; two->tu=one.tu; if(two->tu) { for(m=1;m { num[m]=0; } for(m=1;m<=one.tu;++m) { ++num[one.data[m].j]; } cpot[1]=1; for(m=2;m<=one.nu;++m) { cpot[m]=cpot[m-1]+num[m-1]; } for(m=1;m<=one.tu;m++) { intcol=one.data[m].j; intq=cpot[col]; two->data[q].i=one.data[q].j; two->data[q].j=one.data[q].i; two->data[q].elem=one.data[q].elem; ++cpot[col]; } } return; } 四、调试分析: 调试结果,检查出程序的错误地方。 并且对程序不足的地方进行一步步修改,因为哪怕程序是正确的,也可能存在太多问题。 一定要通过调试解决。 五、测试结果 1.第一组测试数据: 结果正确。 2.第二组测试数据: 结果正确 六、程序清单 #include"stdio.h" typedefstruct { inti; intj; intelem; }triple; typedefstruct { tripledata[101]; intmu; intnu; inttu; }TsMatrix; voidfastTransposeSMatrix(TsMatrixone,TsMatrix*two) {intm; intcpot[101]; intnum[101]; two->mu=one.nu; two->nu=one.mu; two->tu=one.tu; if(two->tu) { for(m=1;m { num[m]=0; } for(m=1;m<=one.tu;++m) { ++num[one.data[m].j]; } cpot[1]=1; for(m=2;m<=one.nu;++m) { cpot[m]=cpot[m-1]+num[m-1]; } for(m=1;m<=one.tu;m++) { intcol=one.data[m].j; intq=cpot[col]; two->data[q].i=one.data[q].j; two->data[q].j=one.data[q].i; two->data[q].elem=one.data[q].elem; ++cpot[col]; } } return; } voidmain() {intt; TsMatrixm_one; TsMatrixm_two; printf("pleaseinput: "); scanf("%d",&m_one.tu); printf("pleaseinput: "); scanf("%d",&m_one.mu); printf("pleaseinput: "); scanf("%d",&m_one.nu); printf("pleaseinput: \n"); for(t=1;t<=m_one.tu;t++) { scanf("%d%d%d",&m_one.data[t].i,&m_one.data[t].j,&m_one.data[t].elem); } fastTransposeSMatrix(m_one,&m_two); printf("End: \n"); for(t=1;t<=m_two.tu;t++) { printf("%d%2d%2d\n",m_two.data[t].i,m_two.data[t].j,m_two.data[t].elem); } getch(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 数制