c5-1~c5-6.h 数组和广义表 存储表示

  1.  // c5-1.h 数组的顺序存储表示
  2.  #include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,
  3.                     // 用于存取变长参数表
  4.  #define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
  5.  struct Array
  6.  {
  7.    ElemType *base// 数组元素基址,由InitArray分配
  8.    int dim; // 数组维数
  9.    int *bounds; // 数组维界基址,由InitArray分配
  10.    int *constants; // 数组映象函数常量基址,由InitArray分配
  11.  };
  12.  // c5-2.h 稀疏矩阵的三元组顺序表存储表示
  13.  #define MAX_SIZE 100 // 非零元个数的最大值
  14.  struct Triple
  15.  {
  16.    int i,j; // 行下标,列下标
  17.    ElemType e; // 非零元素值
  18.  };
  19.  struct TSMatrix
  20.  {
  21.    Triple data[MAX_SIZE+1]; // 非零元三元组表,data[0]未用
  22.    int mu,nu,tu; // 矩阵的行数、列数和非零元个数
  23.  };
  24.  // c5-3.h 稀疏矩阵的三元组行逻辑链接的顺序表存储表示
  25.  #define MAX_SIZE 100 // 非零元个数的最大值
  26.  #define MAX_RC 3 //20 // 最大行列数
  27.  struct Triple // 同c5-2.h
  28.  {
  29.    int i,j; // 行下标,列下标
  30.    ElemType e; // 非零元素值
  31.  };
  32.  struct RLSMatrix
  33.  {
  34.    Triple data[MAX_SIZE+1]; // 非零元三元组表,data[0]未用
  35.    int rpos[MAX_RC+1]; // 各行第一个非零元素的位置表,比c5-2.h增加的项
  36.    int mu,nu,tu; // 矩阵的行数、列数和非零元个数
  37.  };
  38.  // c5-4.h 稀疏矩阵的十字链表存储表示
  39.  struct OLNode
  40.  {
  41.    int i,j; // 该非零元的行和列下标
  42.    ElemType e; // 非零元素值
  43.    OLNode *right,*down; // 该非零元所在行表和列表的后继链域
  44.  };
  45.  typedef OLNode *OLink;
  46.  struct CrossList
  47.  {
  48.    OLink *rhead,*chead;
  49.    // 行和列链表头指针向量基址,由CreatSMatrix_OL()分配
  50.    int mu,nu,tu; // 稀疏矩阵的行数、列数和非零元个数
  51.  };
  52.  // c5-5.h 广义表的头尾链表存储表示
  53.  enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表
  54.  typedef struct GLNode
  55.  {
  56.    ElemTag tag; // 公共部分,用于区分原子结点和表结点
  57.    union // 原子结点和表结点的联合部分
  58.    {
  59.      AtomType atom; // atom是原子结点的值域,AtomType由用户定义
  60.      struct
  61.      {
  62.        GLNode *hp,*tp;
  63.      }ptr; // ptr是表结点的指针域,prt.hp和ptr.tp分别指向表头和表尾
  64.    };
  65.  }*GList,GLNode; // 广义表类型
  66.  // c5-6.h 广义表的扩展线性链表存储表示
  67.  enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表
  68.  typedef struct GLNode1
  69.  {
  70.    ElemTag tag; // 公共部分,用于区分原子结点和表结点
  71.    union // 原子结点和表结点的联合部分
  72.    {
  73.      AtomType atom; // 原子结点的值域
  74.      GLNode1 *hp; // 表结点的表头指针
  75.    };
  76.    GLNode1 *tp; // 相当于线性链表的next,指向下一个元素结点
  77.  }*GList1,GLNode1; // 广义表类型GList1是一种扩展的线性链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值