第八周项目3对称矩阵的压缩存储

  1. /*
  2. 烟台大学计算机学院
  3. 文件名称:xiangmu.cpp
  4. 完成日期:2017年10月22日
  5. 问题描述:用压缩形式存储对称矩阵
  6. 输入描述:输入下三角部分情况
  7. 输出描述:矩阵元素
  8. */
  9. #include <stdio.h>
  10. #include <malloc.h>
  11. #define N 4
  12. //为N阶对称矩阵初始化存储数据的一维数组B
  13. void Init(int *&b)
  14. {
  15. b = (int*)malloc(sizeof(int)*(N*(N+1)/2));
  16. }
  17. //返回存储在b[M]中,对应二维数组A[i][j]的值
  18. int Value(int b[], int i, int j)
  19. {
  20. if (i>=j)
  21. return b[(i*(i+1))/2+j];
  22. else
  23. return b[(j*(j+1))/2+i];
  24. }
  25. //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中
  26. void Assign(int b[], int e, int i, int j)
  27. {
  28. if (i>=j)
  29. b[(i*(i+1))/2+j] = e;
  30. else
  31. b[(j*(j+1))/2+i] = e;
  32. return;
  33. }
  34. //输出压缩存储在b中的对称矩阵
  35. void Disp(int b[])
  36. {
  37. int i,j;
  38. for (i=0; i<N; i++)
  39. {
  40. for (j=0; j<N; j++)
  41. printf("%4d",Value(b,i,j));
  42. printf(" ");
  43. }
  44. }
  45. //销毁存储空间
  46. void Destroy(int b[])
  47. {
  48. free(b);
  49. }
  50. int main()
  51. {
  52. int *b1; //指向整型的指针,待初始化
  53. int i, j;
  54. int v;
  55. Init(b1);
  56. printf("请输入对称矩阵(只需要输入下三角部分即可) ");
  57. for(i=0;i<N;i++)
  58. {
  59. printf("输入第%d行的%d个数据元素: ", i+1, i+1);
  60. for(j=0; j<=i; j++)
  61. {
  62. scanf("%d", &v);
  63. Assign(b1, v, i, j);
  64. }
  65. }
  66. Disp(b1);
  67. Destroy(b1);
  68. return 0;
  69. }
/* 烟台大学计算机学院 文件名称:xiangmu.cpp 完成日期:2017年10月22日 问题描述:用压缩形式存储对称矩阵 输入描述:输入下三角部分情况 输出描述:矩阵元素 */ #include #include #define N 4 //为N阶对称矩阵初始化存储数据的一维数组B void Init(int *&b) { b = (int*)malloc(sizeof(int)*(N*(N+1)/2)); } //返回存储在b[M]中,对应二维数组A[i][j]的值 int Value(int b[], int i, int j) { if (i>=j) return b[(i*(i+1))/2+j]; else return b[(j*(j+1))/2+i]; } //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中 void Assign(int b[], int e, int i, int j) { if (i>=j) b[(i*(i+1))/2+j] = e; else b[(j*(j+1))/2+i] = e; return; } //输出压缩存储在b中的对称矩阵 void Disp(int b[]) { int i,j; for (i=0; i

运行结果:

经验分享 程序员 微信小程序 职场和发展