1.1数组的存储结构
1.行优先存储结构
将数组元素按行向量的顺序存储,即第i+1行的元素放在第i行的元素之后,元素存储的线性序列为:a11,a12…,a1n,a21,a22…,a2n…
2.列优先存储结构
将数组元素按列向量的顺序存储,即第j+1行的元素放在第j行的元素之后,元素存储的线性序列为:a11,a12,…,am1,a12,a22,…,am2…
1.2广义表
广义表中的数据元素可以是原子也可以是子表,因此它为一种带有层次的非线性结构,难以用顺序存储结构表示,通常采用链式存储结构来存储。广义表的长度为最外层包含的元素个数
1.头尾表示法
一个表结点由三部分构成,分别为标志域、指向表头的指针域和指向表尾的指针域,其中,标志域tag=1为标志域,tag=0为原子结点。
typedef struct node
{
int tag;
union{//原子结点和表结点共用内存
datatype data;//原子结点的数据域
struct
{
struct node*hp,*tp;
}ptr;//ptr.hp和ptr.tp分别指向广义表的表头和表尾
};
}HTNode;
若广义表为空,则表头指针为空。对于任何非空广义表,其表头指针均指向一个表结点,且该节点中的hp域指向广义表的表头,tp域指向广义表的表尾。