数据结构与算法
多项式的表示
- 方法1的缺点:造成空间的巨大浪费,做了无用功
线性表及顺序存储
- 查找成功的平均比较次数为(n+1)/2,运气好第一次就找到了,运气差最后一次才找到,则平均时间性能为O(n)
链式存储及查找
- 不同于顺序存储,链式存储时只知道一个链表头很难知道第i个元素的位置或链表的长度,而顺序存储可以通过数组下标查找位置,Last指针求长度,因此在链式存储中这两个问题就变得复杂了
- 注意这里在插入时,s->Next=p->Next与p->Next=s不能对调,如果对调,s->Next指向s,不能完成正确插入
广义表
- 由于广义表中的元素可以是单元素(常量),也可以是另一个广义表(通过指针指向),C语言提供了union类型,可以将单元素与广义表联合起来,通过Tag标记,Tag=0时表示单元素,Tag=1时表示广义表,这样就可以实现两种类型的区分和应用
多重链表
- 注意双向链表不是多重链表
- Term类型有两个指针,一个指向同一行,一个指向同一列,这样分别在行与列上形成循环链表,状如十字,于是称为十字链表,同时Term类型还含有该结点的数值
- Head类型作为行和列的头结点,因此行的头结点与列的头结点实际上时同一个结点
- 矩阵中的Term类型代表非零项,而左上角的Term类型结点代表整个稀疏矩阵的入口,其中提供了几行几列,非零项的个数,如图中为4行5列,7个非零项,通过该结点的指针可以找到所有列的头结点,所有行的头结点
- Term类型与Head类型可以像广义链表一样通过union将两者联合在一起,上图中Tag类型就是两者union形成的统一结构