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

 
  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.  }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值