zoukankan      html  css  js  c++  java
  • 广义表及其推广

    广义表其实是线性表的一种推广,也属于多重链表,他的元素不仅可以是一个单元素也可以是一个广义表。本文介绍 广义表的存储结构和解析union

    广义表的存储结构

    typedef struct GNode *GList;
    struct GNode
    {
        int Tag;   // 标志域, 0表示节点是单元素,1表示节点是广义表 
        union           //  子表指针域Sublist 与单元素数据域Data复用,即共用存储空间 
        {
            ElementType Data;
            GList SubList;
        }URegion;
        GList Next; //指向后继节点 
    };

    这里设置了一个 union 你可以把它看作一个新的结构。

     我们用 tag 来区分 是数据域还是指针域

     

     

     这里节点有两种类型 ,先看term类型图中数据域表示  第二行第二列  值为27

    再看表头的Term节点表示这个表有 4行5列  有  7个非零项

    这里Term 节点的同一行 ,同一列的循环列表形成  十字链表

     这里的head是行的头节点也是列的头节点

    注意这里 不论是Term  节点还是 Head节点都有  Down 和 Right  两个指针域  所以我们可以将他们结合成union

     这是十字链表解决问题的思路

  • 相关阅读:
    lua 逻辑运算 and, or, not
    redis和memcache列出所有key
    Linux protobuf
    CGI,FastCGI,PHP-CGI与PHP-FPM
    lua使用笔记2:Linux 中安装php的lua扩展
    lua使用笔记1:Linux 中安装lua
    Android APK反编译详解
    git 常用命令
    git push 403错误解决方法
    linux(centos)搭建SVN服务器
  • 原文地址:https://www.cnblogs.com/Pigsss/p/13209252.html
Copyright © 2011-2022 走看看