- 数组的表示的方法:
(1)结构数组存储非零项(二元数组)
(2)链表存储非零项:每个结点包含系数和指数两个数据域以及一个指针域,coef-expon-link
typedef struct PolyNode *Polynomial; struct PolyNode { int coef; int expon; Polynomial link; }
- 线性表(List):同类型数据元素构成的有序序列的线性结构;
- 关于typedef:
typedef int elemtype;------为某一些类型自定义名称,即为int类型起名字为elemtype;
- 访问结构中元素:L.Data[i]
- 访问指针结构中元素:PtrL->Data[i]
- L=(linklist)malloc(sizeof(struct lnode));
typedef struct LNode *List;//为LNode结构起别名为List(且List为指针类型); struct LNode//定义结构类型LNode; { ElementType Data[MAXSIZE]; int Last; } struct LNode L;//由结构类型LNode 来定义变量L; List PtrL; //定义指针类型的结构变量PtrL;
为你的结点L动态分配内存
你前面结构体是否这样定义的
typedef struct lnode
{ ...数据项
}*linklist;
函数的原型extern void *malloc(unsigned int num_bytes)
(linklist)是你定义的这种struct lnode这种类型的指针,也可以写成(struct lnode*)malloc(...)
因为如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
其中sizeof是取你定义的结构体取其总的字节数,即malloc后的括号内是要分内内存空间的大小
用sizeof函数获取
而整个分配的返回值是你定义结点*L的指针 也就是L
- free(s):释放s节点所占用的空间;
-
线性表的链式存储:即把逻辑相邻的元素通过“链”建立起逻辑关系,而不要求物理上相邻;(插入、删除不需要修改数据元素,只需要修改链)
-
广义表(Generalized List):线性表的推广,多重链表,表中元素不仅可以是单元素,也可以是另一个广义表;(例子:二元多项式)
-
多重链表:链表中的指针可能同时隶属于多个链,结点的指针域有多个;(但有两个指针域的链表不一定是多重链表,比如双向链表不是多重链表)
-
例:二位数组的表示
(1)用二位数组表示:缺点:数组的大小要提前确定,稀疏矩阵会造成大量的存储空间浪费;