广义表

广义表

  • 广义表是线性表的推广
  • 对于线性表而言,n个元素都是基本的单元素;
  • 广义表中,这些元素不仅可以是单元素也可以是另一个广义表
typedef struct GNode *GList;
struct GNode{
    int Tag; //标志域:0表示结点是单元素,1表示结点是广义表
    union{ //子表指针域SubList与单元素数据域Data复用,即公用存储空间
        ElementType Data;
        GList SubList;
    }URegion;
    GList Next;//指向后继结点
};

多重链表

多重链表:链表中的结点可能同时隶属于多个链

  • 多重链表中结点的指针域会有多个,如前面包含了NextSubList两个指针域
  • 但包含两个指针域的链表并不一定是多重链表,比如,双向链表不是多重链表

多重链表有广泛的用途:基本上如树、图这样相对复杂的数据结构都可以采用多重链表方式实现存储

矩阵

矩阵可以用二维数组表示,但二维数组表示有两个缺陷:

  1. 数组的大小需要事先确定,
  2. 对于“稀疏矩阵,将造成大量的存储空间浪费

可以采用一种典型的多重链表——十字链表来存储系数矩阵

  • 只存储矩阵非0元素项

    结点的数据域:行坐标Row,列坐标Col,数值Value

  • 每个节点通过两个指针域,把同行、同列串起来

    • 行指针(或称为向右指针)Right
    • 列指针(或称为向下指针)Down
  • 用一个标识域Tag区分头结点和非0元素结点

  • 头结点的标识值为”Head“,矩阵非0元素结点的标识值为”Term“

posted @ 2022-03-02 13:33  里列昂遗失的记事本  阅读(178)  评论(0)    收藏  举报