广义表存储结构图的绘制

最近看到广义表存储结构图绘制这一节,自以为课本上的例子看懂了,但是一上手画就出错,网上基本搜不到比较详细的解答,就自己试着去思考,总算是会了,先记录下来,免得后面又忘了。

先上结果:
在这里插入图片描述

说明如下

广义表里面一旦包含多个子表就会有很多括号,往往看的人无比痛苦,很容易搞错,于是先把大体层次框出来,分清楚每个括号的对应关系,便于后续过程。

画图形表示时,根据课本,列表用圆形表示,原子用方形(这里懒得画就省略了),画出相应的对应关系。

为什么要给表编号:课本上为了讲解表中元素亦可能是表,给出的例子就是编了号的,因为但是一般习题中直接给一个广义表,不编号。本人在多次尝试中,发现对于我来说只有经过编号这一步我才画的对,不然根本画不出来,所以就加了这一步。编不编号都行。

绘图要点:

  1. 广义表有两种节点,表结点和原子节点。

表结点
表结点

原子节点
原子节点

  1. 除了空表的表头指针为空外,对任何非空列表,其表头指针均指向一个表结点,且该结点中的hp域指示列表表头(或为原子节点,或为表结点),tp域指向列表表尾(表尾为空则指针为空,否则必为表结点)

我的绘图过程:

  1. 从根节点开始,tp域连接本节点的分支,有几个就画几个,最后一个的tp域置为空指针
  2. 遍历根节点各子节点,若是子表,则重复1,否则直接绘制相应原子节点
  3. 对于仅含有一个空表为元素的表,将其hp域置为空指针
  4. 直到所有节点都画完

以上描述为了通顺有点刻板,真实操作步骤是:先把根节点对应的那一层画出来,有几个分支就画几个,然后对于所有非叶节点的子表(有大写字母的),在保证他们都各有一层的前提下进行绘制,最后画出原子节点,擦掉标注的指针即可。

最终结果如下:
在这里插入图片描述

感觉画这个图最困难的就是在多层括号时确定在图中到底有几层,看了很久才得到的这个办法,不知道是否正确,反正做了四个题都没错,就这样吧,帖子太难写了。

  • 75
    点赞
  • 267
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值