以树的方式存储优先级,只需保留最左侧子树即可,其余位置皆为0元素。采用顺序存储方式,可以较快判断出该运算符号的优先级,同时,采用稀疏矩阵压缩,可节省大量存储空间。
如图,运算符的层数即为其优先级,其中只保存一条支路的树,其余空位置全部补0,然后采用稀疏矩阵的方式进行存储。
压缩矩阵存储通过三元组存储实现:
序 | 行 | 列 | 值 |
1 | 1 | 1 | ( |
2 | 1 | 2 | ) |
3 | 2 | 1 | * |
4 | 2 | 2 | / |
5 | 3 | 1 | + |
6 | 3 | 2 | - |
typedef struct //三元组结构
{
int i,j;//元素的行列下标
char v;//元素值
}tuple;
typedef struct //三元组表结构
{
int m,n,t;//行数、列数、非零元素个数
tuple data[maxnum];
}spmatrix;