main5-1~main5-6.cpp 数组和广义表 检验算法的主程序

本文演示了三维数组的初始化、元素赋值与访问,以及稀疏矩阵的各种运算,包括复制、加减、转置和乘法等,并展示了广义表的创建、遍历、复制、插入和删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
  1.  // main5-1.cpp 检验bo5-1.cpp的主程序
  2.  #include"c1.h"
  3.  typedef int ElemType;
  4.  #include"c5-1.h"
  5.  #include"bo5-1.cpp"
  6.  void main()
  7.  {
  8.    Array A;
  9.    int i,j,k,*p,dim=3,bound1=3,bound2=4,bound3=2; // A[3][4][2]数组
  10.    ElemType e,*p1;
  11.    InitArray(A,dim,bound1,bound2,bound3); // 构造3×4×2的3维数组A
  12.    p=A.bounds;
  13.    printf("A.bounds=");
  14.    for(i=0;i<dim;i++) // 顺序输出A.bounds
  15.      printf("%d ",*(p+i));
  16.    p=A.constants;
  17.    printf("/nA.constants=");
  18.    for(i=0;i<dim;i++) // 顺序输出A.constants
  19.      printf("%d ",*(p+i));
  20.    printf("/n%d页%d行%d列矩阵元素如下:/n",bound1,bound2,bound3);
  21.    for(i=0;i<bound1;i++)
  22.    {
  23.      for(j=0;j<bound2;j++)
  24.      {
  25.        for(k=0;k<bound3;k++)
  26.        {
  27.          Assign(A,i*100+j*10+k,i,j,k); // 将i×100+j×10+k赋值给A[i][j][k]
  28.          Value(e,A,i,j,k); // 将A[i][j][k]的值赋给e
  29.          printf("A[%d][%d][%d]=%2d ",i,j,k,e); // 输出A[i][j][k]
  30.        }
  31.        printf("/n");
  32.      }
  33.      printf("/n");
  34.    }
  35.    p1=A.base;
  36.    printf("A.base=/n");
  37.    for(i=0;i<bound1*bound2*bound3;i++) // 顺序输出A.base
  38.    {
  39.      printf("%4d",*(p1+i));
  40.      if(i%(bound2*bound3)==bound2*bound3-1)
  41.        printf("/n");
  42.    }
  43.    printf("A.dim=%d/n",A.dim);
  44.    DestroyArray(A);
  45. }
  1.  // main5-2.cpp 检验bo5-2.cpp的主程序
  2.  #include"c1.h"
  3.  typedef int ElemType;
  4.  #include"c5-2.h"
  5.  #include"bo5-2.cpp"
  6.  void main()
  7.  {
  8.    TSMatrix A,B,C;
  9.    printf("创建矩阵A: ");
  10.    CreateSMatrix(A);
  11.    PrintSMatrix(A);
  12.    printf("由矩阵A复制矩阵B:/n");
  13.    CopySMatrix(A,B);
  14.    PrintSMatrix1(B);
  15.    DestroySMatrix(B);
  16.    printf("销毁矩阵B后:/n");
  17.    PrintSMatrix1(B);
  18.    printf("创建矩阵B2:(与矩阵A的行、列数相同,行、列分别为%d,%d)/n",A.mu,A.nu);
  19.    CreateSMatrix(B);
  20.    PrintSMatrix1(B);
  21.    AddSMatrix(A,B,C);
  22.    printf("矩阵C1(A+B):/n");
  23.    PrintSMatrix1(C);
  24.    SubtSMatrix(A,B,C);
  25.    printf("矩阵C2(A-B):/n");
  26.    PrintSMatrix1(C);
  27.    TransposeSMatrix(A,C);
  28.    printf("矩阵C3(A的转置):/n");
  29.    PrintSMatrix1(C);
  30.    printf("创建矩阵A2: ");
  31.    CreateSMatrix(A);
  32.    PrintSMatrix1(A);
  33.    printf("创建矩阵B3:(行数应与矩阵A2的列数相同=%d)/n",A.nu);
  34.    CreateSMatrix(B);
  35.    PrintSMatrix1(B);
  36.    MultSMatrix(A,B,C);
  37.    printf("矩阵C5(A×B):/n");
  38.    PrintSMatrix1(C);
  39.  }
  1.  // main5-3.cpp 检验bo5-3.cpp的主程序(与main5-2.cpp很相像)
  2.  #include"c1.h"
  3.  typedef int ElemType;
  4.  #include"c5-3.h" // 此行与main5-2.cpp不同
  5.  #include"bo5-3.cpp" // 此行与main5-2.cpp不同
  6.  void main()
  7.  {
  8.    RLSMatrix A,B,C; // 此行与main5-2.cpp不同
  9.    printf("创建矩阵A: ");
  10.    CreateSMatrix(A);
  11.    PrintSMatrix(A);
  12.    printf("由矩阵A复制矩阵B:/n");
  13.    CopySMatrix(A,B);
  14.    PrintSMatrix1(B);
  15.    DestroySMatrix(B);
  16.    printf("销毁矩阵B后:/n");
  17.    PrintSMatrix1(B);
  18.    printf("创建矩阵B2:(与矩阵A的行、列数相同,行、列分别为%d,%d)/n",A.mu,A.nu);
  19.    CreateSMatrix(B);
  20.    PrintSMatrix1(B);
  21.    AddSMatrix(A,B,C);
  22.    printf("矩阵C1(A+B):/n");
  23.    PrintSMatrix1(C);
  24.    SubtSMatrix(A,B,C);
  25.    printf("矩阵C2(A-B):/n");
  26.    PrintSMatrix1(C);
  27.    TransposeSMatrix(A,C);
  28.    printf("矩阵C3(A的转置):/n");
  29.    PrintSMatrix1(C);
  30.    printf("创建矩阵A2:/n");
  31.    CreateSMatrix(A);
  32.    PrintSMatrix1(A);
  33.    printf("创建矩阵B3:(行数应与矩阵A2的列数相同=%d)/n",A.nu);
  34.    CreateSMatrix(B);
  35.    PrintSMatrix1(B);
  36.    MultSMatrix(A,B,C);
  37.    printf("矩阵C5(A×B):/n");
  38.    PrintSMatrix1(C);
  39.  }
  1.  // main5-4.cpp 检验bo5-4.cpp的主程序
  2.  #include"c1.h"
  3.  typedef int ElemType;
  4.  #include"c5-4.h"
  5.  #include"bo5-4.cpp"
  6.  void main()
  7.  {
  8.    CrossList A,B,C;
  9.    InitSMatrix(A); // CrossList类型的变量在初次使用之前必须初始化
  10.    InitSMatrix(B);
  11.    printf("创建矩阵A: ");
  12.    CreateSMatrix(A);
  13.    PrintSMatrix(A);
  14.    printf("由矩阵A复制矩阵B: ");
  15.    CopySMatrix(A,B);
  16.    PrintSMatrix(B);
  17.    DestroySMatrix(B); // CrossList类型的变量在再次使用之前必须先销毁
  18.    printf("销毁矩阵B后,矩阵B为:/n");
  19.    PrintSMatrix1(B);
  20.    printf("创建矩阵B2:(与矩阵A的行、列数相同,行、列分别为%d,%d)/n",A.mu,A.nu);
  21.    CreateSMatrix(B);
  22.    PrintSMatrix1(B);
  23.    printf("矩阵C1(A+B):/n");
  24.    AddSMatrix(A,B,C);
  25.    PrintSMatrix1(C);
  26.    DestroySMatrix(C);
  27.    printf("矩阵C2(A-B):/n");
  28.    SubtSMatrix(A,B,C);
  29.    PrintSMatrix1(C);
  30.    DestroySMatrix(C);
  31.    printf("矩阵C3(A的转置):/n");
  32.    TransposeSMatrix(A,C);
  33.    PrintSMatrix1(C);
  34.    DestroySMatrix(A);
  35.    DestroySMatrix(B);
  36.    DestroySMatrix(C);
  37.    printf("创建矩阵A2: ");
  38.    CreateSMatrix(A);
  39.    PrintSMatrix1(A);
  40.    printf("创建矩阵B3:(行数应与矩阵A2的列数相同=%d)/n",A.nu);
  41.    CreateSMatrix(B);
  42.    PrintSMatrix1(B);
  43.    printf("矩阵C5(A×B):/n");
  44.    MultSMatrix(A,B,C);
  45.    PrintSMatrix1(C);
  46.    DestroySMatrix(A);
  47.    DestroySMatrix(B);
  48.    DestroySMatrix(C);
  49.  }
  1.  // main5-5.cpp 检验bo5-5.cpp的主程序
  2.  #include"c1.h"
  3.  typedef char AtomType; // 定义原子类型为字符型
  4.  #include"c5-5.h" // 定义广义表的头尾链表存储
  5.  #include"bo5-5.cpp"
  6.  void visit(AtomType e)
  7.  {
  8.    printf("%c ", e);
  9.  }
  10.  void main()
  11.  {
  12.    char p[80];
  13.    SString t;
  14.    GList l,m;
  15.    InitGList(l);
  16.    InitGList(m);
  17.    printf("空广义表l的深度=%d l是否空?%d(1:是 0:否)/n",GListDepth(l),GListEmpty(l));
  18.    printf("请输入广义表l(书写形式:空表:(),单原子:(a),其它:(a,(b),c)):/n");
  19.    gets(p);
  20.    StrAssign(t,p);
  21.    CreateGList(l,t);
  22.    printf("广义表l的长度=%d/n",GListLength(l));
  23.    printf("广义表l的深度=%d l是否空?%d(1:是 0:否)/n",GListDepth(l),GListEmpty(l));
  24.    printf("遍历广义表l:/n");
  25.    Traverse_GL(l,visit);
  26.    printf("/n复制广义表m=l/n");
  27.    CopyGList(m,l);
  28.    printf("广义表m的长度=%d/n",GListLength(m));
  29.    printf("广义表m的深度=%d/n",GListDepth(m));
  30.    printf("遍历广义表m:/n");
  31.    Traverse_GL(m,visit);
  32.    DestroyGList(m);
  33.    m=GetHead(l);
  34.    printf("/nm是l的表头元素,遍历m:/n");
  35.    Traverse_GL(m,visit);
  36.    DestroyGList(m);
  37.    m=GetTail(l);
  38.    printf("/nm是由l的表尾形成的广义表,遍历广义表m:/n");
  39.    Traverse_GL(m,visit);
  40.    InsertFirst_GL(m,l);
  41.    printf("/n插入广义表l为m的表头,遍历广义表m:/n");
  42.    Traverse_GL(m,visit);
  43.    printf("/n删除m的表头,遍历广义表m:/n");
  44.    DestroyGList(l);
  45.    DeleteFirst_GL(m,l);
  46.    Traverse_GL(m,visit);
  47.    printf("/n");
  48.    DestroyGList(m);
  49.  }
  1.  // main5-6.cpp 检验bo5-6.cpp的主程序
  2.  #include"c1.h"
  3.  typedef char AtomType; // 定义原子类型为字符型
  4.  #include"c5-6.h" // 定义广义表的扩展线性链表存储结构
  5.  #include"bo5-6.cpp" // 广义表的扩展线性链表存储结构基本操作
  6.  void visit(AtomType e)
  7.  {
  8.    printf("%c ", e);
  9.  }
  10.  void main()
  11.  {
  12.    char p[80];
  13.    GList1 l,m;
  14.    SString t;
  15.    InitGList(l); // 建立空的广义表l
  16.    printf("空广义表l的深度=%d l是否空?%d(1:是 0:否)/n",GListDepth(l),GListEmpty(l));
  17.    printf("请输入广义表l(书写形式:空表:(),单原子:(a),其它:(a,(b),c)):/n");
  18.    gets(p);
  19.    StrAssign(t,p);
  20.    CreateGList(l,t);
  21.    printf("广义表l的长度=%d/n",GListLength(l));
  22.    printf("广义表l的深度=%d l是否空?%d(1:是 0:否)/n",GListDepth(l),GListEmpty(l));
  23.    printf("遍历广义表l:/n");
  24.    Traverse_GL(l,visit);
  25.    printf("/n复制广义表m=l/n");
  26.    CopyGList(m,l);
  27.    printf("广义表m的长度=%d/n",GListLength(m));
  28.    printf("广义表m的深度=%d/n",GListDepth(m));
  29.    printf("遍历广义表m:/n");
  30.    Traverse_GL(m,visit);
  31.    DestroyGList(m);
  32.    m=GetHead(l);
  33.    printf("/nm是l的表头元素,遍历m:/n");
  34.    Traverse_GL(m,visit);
  35.    DestroyGList(m);
  36.    m=GetTail(l);
  37.    printf("/nm是由l的表尾形成的广义表,遍历广义表m:/n");
  38.    Traverse_GL(m,visit);
  39.    InsertFirst_GL(m,l);
  40.    printf("/n插入广义表l为m的表头,遍历广义表m:/n");
  41.    Traverse_GL(m,visit);
  42.    DeleteFirst_GL(m,l);
  43.    printf("/n删除m的表头,遍历广义表m:/n");
  44.    Traverse_GL(m,visit);
  45.    printf("/n");
  46.    DestroyGList(m);
  47.  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值