【数组】
顺序存储:
n维的数组结构存储方式还是按照一维的顺序存储,只是在维度上和纬度的附加单位上设置含与维度值相等的变量(放进一个数组中),通过变量之间的协同操作实现n维数组的表现结构
【矩阵】
1、特殊矩阵
对称矩阵
存储方式:只存储下(或者是上)三角矩阵的值,并将值按照行(或者列)顺序的排序方式存储进一维数组中
2、稀疏矩阵
存储方式:
(1)三元组
typedef struct{
int i,j; //i对应行,j对应列
ElemType e; //e为元素值
}Triple;
其中i对应行,j对应列,元素值为e。
普通转置:o(mu*tu)
快速转置:引入了2个辅助向量:o(mu+nu)
(2)行逻辑链接的顺序表
将三元组结构中增加的2个辅助向量中的一个(各行计量第一个非零元素的位置的变量向量)
typedef struct{
Triple data[MAXSIZE+1];
int rpos[MAXRC+1];
int mu,nu,tu; //矩阵的行数,列数和非零元素
}RLSMatrix;
(3)十字链表存储
//-----稀疏矩阵的十字链表存储表示-----
typedef struct OLNode{
int i,j; //该非零元的行和列下标
ElemType e;
struct OLNode *right,*down; //行列表的分别后继链域
}OLNode;*OLink;
typedef struct{
OLink *rhead,*chead; //行和列链表头指针向量基址由CreateSMatrix分配
int mu,nu,tu; //行数、列数和非零元个数
}CrossList;
操作类似于链表
创建过程:用动态生成结点的方式生成结点,并将结点插入链表中,注意要处理好总共4个指针
A、矩阵相乘
B、矩阵相加(注意可能出现的对应结点相加为零消除的情况)
【广义表】
(1)简单存储结构
(2)扩展存储结构
【m元多项式】
比广义表多了一个数据项,因为要存储系数和指数这2个参数
【广义表的递归算法】
广义表有两种分析方法,一种是将广义表分成n个字表逐一分析
eg:S=((),(a,b),((c),d))
其中A = (),B = (a,b),C = ((c),d),再进行递归分解
还有一种是将广义表内部分为2个部分,表头和表尾:
Head = (),Tail = (a,b),((c),d)。。。