tup.h

[cpp] view plaincopy
  1. #ifndef TUP_H_INCLUDED
  2. #define TUP_H_INCLUDED
  3. #define M 6
  4. #define N 7
  5. #define MaxSize  100         //矩阵中非零元素最多个数
  6. typedef int ElemType;
  7. typedef struct
  8. {
  9. int r;                  //行号
  10. int c;                  //列号
  11. ElemType d;             //元素值
  12. } TupNode;                  //三元组定义
  13. typedef struct
  14. {
  15. int rows;               //行数
  16. int cols;               //列数
  17. int nums;               //非零元素个数
  18. TupNode data[MaxSize];
  19. } TSMatrix;                 //三元组顺序表定义
  20. void CreatMat(TSMatrix &t,ElemType A[M][N]);  //从一个二维稀疏矩阵创建其三元组表示
  21. bool Value(TSMatrix &t,ElemType x,int i,int j);  //三元组元素赋值
  22. bool Assign(TSMatrix t,ElemType &x,int i,int j); //将指定位置的元素值赋给变量
  23. void DispMat(TSMatrix t);//输出三元组
  24. void TranTat(TSMatrix t,TSMatrix &tb);//矩阵转置
  25. #endif // TUP_H_INCLUDED

tup.cpp

[cpp] view plaincopy
  1. #include "stdio.h"
  2. #include "tup.h"
  3. void CreatMat(TSMatrix &t,ElemType A[M][N])  //从一个二维稀疏矩阵创建其三元组表示
  4. {
  5. int i,j;
  6. t.rows=M;
  7. t.cols=N;
  8. t.nums=0;
  9. for (i=0; i<M; i++)
  10. {
  11. for (j=0; j<N; j++)
  12. if (A[i][j]!=0)     //只存储非零元素
  13. {
  14. t.data[t.nums].r=i;
  15. t.data[t.nums].c=j;
  16. t.data[t.nums].d=A[i][j];
  17. t.nums++;
  18. }
  19. }
  20. }
  21. bool Value(TSMatrix &t,ElemType x,int i,int j)  //三元组元素赋值
  22. {
  23. int k=0,k1;
  24. if (i>=t.rows || j>=t.cols)
  25. return false;               //失败时返回false
  26. while (k<t.nums && i>t.data[k].r) k++;                  //查找行
  27. while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//查找列
  28. if (t.data[k].r==i && t.data[k].c==j)   //存在这样的元素
  29. t.data[k].d=x;
  30. else                                    //不存在这样的元素时插入一个元素
  31. {
  32. for (k1=t.nums-1; k1>=k; k1--)
  33. {
  34. t.data[k1+1].r=t.data[k1].r;
  35. t.data[k1+1].c=t.data[k1].c;
  36. t.data[k1+1].d=t.data[k1].d;
  37. }
  38. t.data[k].r=i;
  39. t.data[k].c=j;
  40. t.data[k].d=x;
  41. t.nums++;
  42. }
  43. return true;                        //成功时返回true
  44. }
  45. bool Assign(TSMatrix t,ElemType &x,int i,int j)  //将指定位置的元素值赋给变量
  46. {
  47. int k=0;
  48. if (i>=t.rows || j>=t.cols)
  49. return false;           //失败时返回false
  50. while (k<t.nums && i>t.data[k].r) k++;                  //查找行
  51. while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//查找列
  52. if (t.data[k].r==i && t.data[k].c==j)
  53. x=t.data[k].d;
  54. else
  55. x=0;                //在三元组中没有找到表示是零元素
  56. return true;            //成功时返回true
  57. }
  58. void DispMat(TSMatrix t)        //输出三元组
  59. {
  60. int i;
  61. if (t.nums<=0)          //没有非零元素时返回
  62. return;
  63. printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);
  64. printf("\t------------------\n");
  65. for (i=0; i<t.nums; i++)
  66. printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);
  67. }
  68. void TranTat(TSMatrix t,TSMatrix &tb)       //矩阵转置
  69. {
  70. int p,q=0,v;                    //q为tb.data的下标
  71. tb.rows=t.cols;
  72. tb.cols=t.rows;
  73. tb.nums=t.nums;
  74. if (t.nums!=0)                  //当存在非零元素时执行转置
  75. {
  76. for (v=0; v<t.cols; v++)        //tb.data[q]中的记录以c域的次序排列
  77. for (p=0; p<t.nums; p++)    //p为t.data的下标
  78. if (t.data[p].c==v)
  79. {
  80. tb.data[q].r=t.data[p].c;
  81. tb.data[q].c=t.data[p].r;
  82. tb.data[q].d=t.data[p].d;
  83. q++;
  84. }
  85. }
  86. }

main.cpp

[cpp] view plaincopy
  1. /*
  2. Copyright (c)2016,烟台大学计算机与控制工程学院
  3. All rights reserved.
  4. 文件名称:3.cpp
  5. 作    者:  陈朋
  6. 完成日期:2016年11月3日
  7. 版 本 号:v1.0
  8. 问题描述:
  9. 输入描述:无
  10. 程序输出:若干。
  11. */
  12. #include <stdio.h>
  13. #include "tup.h"
  14. int main()
  15. {
  16. TSMatrix t,tb;
  17. int x,y=10;
  18. int A[6][7]=
  19. {
  20. {0,0,1,0,0,0,0},
  21. {0,2,0,0,0,0,0},
  22. {3,0,0,0,0,0,0},
  23. {0,0,0,5,0,0,0},
  24. {0,0,0,0,6,0,0},
  25. {0,0,0,0,0,7,4}
  26. };
  27. CreatMat(t,A);
  28. printf("b:\n");
  29. DispMat(t);
  30. if (Assign(t,x,2,5)==true)  //调用时返回true
  31. printf("Assign(t,x,2,5)=>x=%d\n",x);
  32. else  //调用时返回false
  33. printf("Assign(t,x,2,5)=>参数错误\n");
  34. Value(t,y,2,5);
  35. printf("执行Value(t,10,2,5)\n");
  36. if (Assign(t,x,2,5)==true)  //调用时返回true
  37. printf("Assign(t,x,2,5)=>x=%d\n",x);
  38. else  //调用时返回false
  39. printf("Assign(t,x,2,5)=>参数错误\n");
  40. printf("b:\n");
  41. DispMat(t);
  42. TranTat(t,tb);
  43. printf("矩阵转置tb:\n");
  44. DispMat(tb);
  45. return 0;
  46. }
  47. 运行结果:

第九周 项目三--稀疏矩阵的三元组表示的实现及应用相关推荐

  1. 第九周项目三-人数不定的工资类

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月24日*版 本 号:v1. ...

  2. 第九周项目三:星星图案(一)

    /* *copyright (c) 2014, 烟台大学计算机学院. *All rights reserved. *文件名称:test.cpp *作者:陆云杰 *完成日期:2014年10月23日 *版 ...

  3. 第七周项目三-用多文件组织多个类的程序

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月13日*版 本 号:v1. ...

  4. 第九周项目二时间类的重载<<与>>,一目。

    /* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作 者: * 完成日期:2014 年4 月22 日 * 版 本 号:v1.0 * ...

  5. 第八周实践项目8 稀疏矩阵的三元组表示的实现及应用

    #include <stdio.h> #define M 6 #define N 7 #define MaxSize 100 //矩阵中非零元素最多个数 typedef int ElemT ...

  6. 第五周项目三-时间类(2)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...

  7. 数据结构上机实践第九周项目3 - 利用二叉树遍历思想解决问题

    利用二叉树遍历思想解决问题 学以致用,知行合一,学了知识就要会运用,否则跟背课文没什么区别,上次实践,做了二叉树递归遍历的算法实现,本次实践,将利用遍历思想解决问题,将遍历思想真正的运用到实际问题需求 ...

  8. 第十五周 项目三 归并排序算法的改进

    /* * Copyright (c)2017,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目3.cpp * 作 者:孙仁圆 * 完成日期:2017年12 ...

  9. 第九周项目1——猴子选大王(数组版)

    /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:wu.cpp * 作    者:武昊 * 完成日期:2016年1 ...

  10. 第十三周项目三-形状类族中的纯虚函数

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

最新文章

  1. mysql数据类型总结
  2. 重新精读《Java 编程思想》系列之final关键字
  3. Android studio怎么配置javadoc生成项目API
  4. Spring3.1.0+Quartz1.8.6整合实现计划任务
  5. 深度优先搜索及广度优先搜索
  6. 在 Win10 中配置 Linux 开发环境
  7. mongodbVUE基本操作(转)
  8. java9模块不可见问题
  9. 一文看懂搜狗招股书:90次提到AI,王小川持股5%,净利3.7亿
  10. MFC下debug改成release版本出现问题及解决办法
  11. 编程语言-Ruby-问题整理
  12. linux线程组和进程区别,Linux中进程和线程之间的区别
  13. 为什么我的Linux主机内存用的那么快?
  14. 关于做ceb转换cebx遇到的问题及解决方案总结
  15. 阿里云发布智慧书店解决方案 联手新华书店总店落地首个“城市书房”
  16. PCB线宽与电阻的计算
  17. 2021 App上架到 各应用商店(应用宝,华为,vivo,小米,AppStore)
  18. 转:信息部是管理部门or服务部门?这些CIO在群里“吵” 起来了
  19. css段落首行缩进,文字间距
  20. ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)

热门文章

  1. 运维工程师可能遇到的面试题
  2. vnc远程控制软件官网,vnc远程控制软件官网下载,好物推荐
  3. 类静态初始化块即将纳入ES2022,我们先一睹为快
  4. Docker容器进入的3种方式
  5. 为什么程序员不需要MATLAB技能?
  6. getinfo怎么用php,PHP SplObjectStorage getinfo()用法及代码示例
  7. 在window10中怎样连接扫描仪,扫描证件
  8. 美联储印钞,中国物价为何上涨?
  9. 绿米开关如何重置_绿米智能开关评测
  10. 阳阳智能开关固件2.0版本