- // c5-1.h 数组的顺序存储表示
- #include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,
- // 用于存取变长参数表
- #define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
- struct Array
- {
- ElemType *base; // 数组元素基址,由InitArray分配
- int dim; // 数组维数
- int *bounds; // 数组维界基址,由InitArray分配
- int *constants; // 数组映象函数常量基址,由InitArray分配
- };
- // c5-2.h 稀疏矩阵的三元组顺序表存储表示
- #define MAX_SIZE 100 // 非零元个数的最大值
- struct Triple
- {
- int i,j; // 行下标,列下标
- ElemType e; // 非零元素值
- };
- struct TSMatrix
- {
- Triple data[MAX_SIZE+1]; // 非零元三元组表,data[0]未用
- int mu,nu,tu; // 矩阵的行数、列数和非零元个数
- };
- // c5-3.h 稀疏矩阵的三元组行逻辑链接的顺序表存储表示
- #define MAX_SIZE 100 // 非零元个数的最大值
- #define MAX_RC 3 //20 // 最大行列数
- struct Triple // 同c5-2.h
- {
- int i,j; // 行下标,列下标
- ElemType e; // 非零元素值
- };
- struct RLSMatrix
- {
- Triple data[MAX_SIZE+1]; // 非零元三元组表,data[0]未用
- int rpos[MAX_RC+1]; // 各行第一个非零元素的位置表,比c5-2.h增加的项
- int mu,nu,tu; // 矩阵的行数、列数和非零元个数
- };
- // c5-4.h 稀疏矩阵的十字链表存储表示
- struct OLNode
- {
- int i,j; // 该非零元的行和列下标
- ElemType e; // 非零元素值
- OLNode *right,*down; // 该非零元所在行表和列表的后继链域
- };
- typedef OLNode *OLink;
- struct CrossList
- {
- OLink *rhead,*chead;
- // 行和列链表头指针向量基址,由CreatSMatrix_OL()分配
- int mu,nu,tu; // 稀疏矩阵的行数、列数和非零元个数
- };
- // c5-5.h 广义表的头尾链表存储表示
- enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表
- typedef struct GLNode
- {
- ElemTag tag; // 公共部分,用于区分原子结点和表结点
- union // 原子结点和表结点的联合部分
- {
- AtomType atom; // atom是原子结点的值域,AtomType由用户定义
- struct
- {
- GLNode *hp,*tp;
- }ptr; // ptr是表结点的指针域,prt.hp和ptr.tp分别指向表头和表尾
- };
- }*GList,GLNode; // 广义表类型
- // c5-6.h 广义表的扩展线性链表存储表示
- enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表
- typedef struct GLNode1
- {
- ElemTag tag; // 公共部分,用于区分原子结点和表结点
- union // 原子结点和表结点的联合部分
- {
- AtomType atom; // 原子结点的值域
- GLNode1 *hp; // 表结点的表头指针
- };
- GLNode1 *tp; // 相当于线性链表的next,指向下一个元素结点
- }*GList1,GLNode1; // 广义表类型GList1是一种扩展的线性链表
c5-1~c5-6.h 数组和广义表 存储表示
最新推荐文章于 2023-05-13 21:48:49 发布