感谢博客 https://www.cnblogs.com/rookieJW/p/9028127.html
https://blog.youkuaiyun.com/mozha_666/article/details/79659426
广义表
二元多项式:f(x,y)=8x^12y^6+5x^12y^2+3x^3y^2+x+y=(8y^6+5y^2)x^12+3x^3y^2+x+y
节点:
tag: 0 表示结点是只含有x,1表示该节点含有y
data: 存放系数和指数
sublist:指向存放y信息节点
next:指向下一个节点
表示:
广义表是线性表的推广,也是由n个元素组成的有序序列。与线性表的差别:线性表中的元素都是存储单元素,而广义表中存储的元素不仅仅可以是单元素或另一个广义表(可以指向另一个线性表)。
广义表中结点的两种可能:
1. 单元素,需要有个域来存储改单元素的值。 2. 广义表需要有个域来指向另一个链表typedef struct GNode *GList;
typedef struct GNode{
//可以设置tag为0,union单元存的就是数据,为1存的就是指向另一广义表的指针
int tag;
union{
ElementType data;
GList sublist;
}
GList next;
}GNode;
多重链表
比如上面的结点:
属于2个链
多重链表:链表中的节点可能同时隶属于多个链
多重链表中结点的指针域会有多个,但包含多个指针域的链表不一定是多重链表。如:双向链表。
1、什么是多重链表,就是链表里的结点可能隶属多个链表,最常见的就是十字链表,每个结点都有多个指针域,对应于多个链表嘛,但是反过来说,拥有多个指针域的结点的链表就是多重链表是不准确的,因为循环链表的结点都有2个指针域一个前驱一个后继,但是它就不是多重链表
2、多重链表有什么用途呢,比如存储树或者图等等复杂数据结构,所以学好各类线性表的操作是很有必要的,因为之后的很多复杂数据结构的存储结构都是以这个为基础
3、多重链表最典型的是以十字链表的形式存储二维数组