algo5-1~algo5-2.cpp 数组和广义表 主程序

来源:互联网 发布:sem优化方案模板 编辑:程序博客网 时间:2024/06/09 16:42
 
  1.  // algo5-1.cpp 实现算法5.2的程序
  2.  #include"c1.h"
  3.  typedef int ElemType;
  4.  #include"c5-2.h"
  5.  #include"bo5-2.cpp"
  6.  void FastTransposeSMatrix(TSMatrix M,TSMatrix &T)
  7.  { // 快速求稀疏矩阵M的转置矩阵T。算法5.2改
  8.    int p,q,t,col,*num,*cpot;
  9.    num=(int *)malloc((M.nu+1)*sizeof(int)); // 存M每列(T每行)非零元素个数([0]不用)
  10.    cpot=(int *)malloc((M.nu+1)*sizeof(int)); // 存T每行的下1个非零元素的存储位置([0]不用)
  11.    T.mu=M.nu; // 给T的行、列数与非零元素个数赋值
  12.    T.nu=M.mu;
  13.    T.tu=M.tu;
  14.    if(T.tu) // 是非零矩阵
  15.    {
  16.      for(col=1;col<=M.nu;++col)
  17.        num[col]=0; // 计数器初值设为0
  18.      for(t=1;t<=M.tu;++t) // 求M中每一列含非零元素个数
  19.        ++num[M.data[t].j];
  20.      cpot[1]=1; // T的第1行的第1个非零元在T.data中的序号为1
  21.      for(col=2;col<=M.nu;++col)
  22.        cpot[col]=cpot[col-1]+num[col-1]; // 求T的第col行的第1个非零元在T.data中的序号
  23.      for(p=1;p<=M.tu;++p) // 从M的第1个元素开始
  24.      {
  25.        col=M.data[p].j; // 求得在M中的列数
  26.        q=cpot[col]; // q指示M当前的元素在T中的序号
  27.        T.data[q].i=M.data[p].j;
  28.        T.data[q].j=M.data[p].i;
  29.        T.data[q].e=M.data[p].e;
  30.        ++cpot[col]; // T第col行的下1个非零元在T.data中的序号
  31.      }
  32.    }
  33.    free(num);
  34.    free(cpot);
  35.  }
  36.  void main()
  37.  {
  38.    TSMatrix A,B;
  39.    printf("创建矩阵A: ");
  40.    CreateSMatrix(A);
  41.    PrintSMatrix1(A);
  42.    FastTransposeSMatrix(A,B);
  43.    printf("矩阵B(A的快速转置):/n");
  44.    PrintSMatrix1(B);
  45.  }

 

 

  1.  // algo5-2.cpp 变长参数表(函数的实参个数可变)编程示例
  2.  #include"c1.h"
  3.  #include<stdarg.h> // 实现变长参数表要包括的头文件
  4.  typedef int ElemType; 
  5.  ElemType Max(int num,...) // ...表示变长参数表,位于形参表的最后,前面必须有至少一个固定参数
  6.  { // 函数功能:返回num个数中的最大值
  7.    va_list ap; // 定义ap是变长参数表类型(C语言的数据类型)
  8.    int i;
  9.    ElemType m,n;
  10.    if(num<1)
  11.      exit(ERROR);
  12.    va_start(ap,num); // ap指向固定参数num后面的实参表
  13.    m=va_arg(ap,ElemType); // 依次读取ap所指的实参(以逗号为分隔符)作为ElemType类型实参,ap向后移
  14.    for(i=1;i<num;++i)
  15.    {
  16.      n=va_arg(ap,ElemType); // 同上
  17.      if(m<n)
  18.        m=n;
  19.    }
  20.    va_end(ap); // 与va_start()配对,结束对变长参数表的读取,ap不再指向变长参数表
  21.    return m;
  22.  }
  23.  void main()
  24.  {
  25.    printf("1.最大值为%d/n",Max(4,7,9,5,8)); // 在4个数中求最大值,ap最初指向“7,9,5,8”
  26.    printf("2.最大值为%d/n",Max(3,17,36,25)); // 在3个数中求最大值,ap最初指向“17,36,25”
  27.  }

 

 

原创粉丝点击