随笔由来(不重要):一开始还真不知道有这个广义表,算法书上也没有看到。直到做题才看到广义表。度娘找了几篇博客都讲的很散很乱。所以写下这篇博客希望能够让自己和看到这篇博客的人能够理解广义表。如果有错误请评论给我我看到后会及时更改
广义表:广义表其实就是一个典型的单向链表,即线性表的一种。存储的类型包括原子元素(单个数据)或另一个广义表(子表)
[1]: 对于用2表示另一张广义表我对度娘结果的少部分查询中仅仅在一处发现,但是如果不用2表示对于代码计算深度会出现无法计算的问题。这里我选择使用2来表示另一张广义表.
以 L = (A,b,(c,d)) 为例
所以L = (A,b,(c,d))表示的意思是:有一张广义表L,里面包含的数据是另一个广义表A、数据b、子表。子表元素为数据b、数据c
注意点:
正确的画法应该是箭头初始端应该画到框框内,但是我用的画图软件这样子好麻烦就懒得弄了
注意点:
[2]:我这里认为如果这么表示可能对于像我一样脑子不灵光的人去理解深度会有点What,所以我选择画图的时候进行连接
广义表的深度:括号最大层数;可以理解为树的结点最大层次。看例题
广义表的长度:第一层结点的个数或深度为1的结点个数。看例题
Tail指令(表尾):,将头结点指向广义表第一层第二个元素,并抛弃第一个元素。
结论:表尾的结果一定是子表
Head指令(表头):直接获取广义表的第一层的第一个元素
结论:表头的结果可以是原子,也可以是子表
作为拓展和了解
由之前的图可知广义表存储结构的一个很大的缺点。
一、tag竟然出现了2,这样每个表在tag字段就需要用2bit来存储,且会造成11(B)被浪费。那么可以让每次连接其他的广义表时直接连接其第一个元素而不是表头
二、对于画图阶段,每次连接一个子表或其他广义表时都需要先在数据处连接表头,再连接数据。这样对于计算深度及其不方便。那么对于同一层的结点都用Link去连接
现在已经讲解完了广义表的全部内容,因为属于理论科学,如果你是要考试的人建议您还是仔细阅读你考试大纲对于此处的解释,可能我讲的和你们考的有些区别
题目一:一个非空广义表的表尾()——广东工业大学2019
A:不可能是子表;B:只能是子表;C:只能是原子;D:可能是子表或原子
题目二:设广义表L=((a,b,c)),则L的长度和深度分别为()——上海海事大学2018
A:1 1;B:1 3;C:1 2;D: 2 3
题目三:若广义表L满足Head(L)=Tail(L),则L为()——扬州大学2017
A:();B:(());C:((),());D:((),(),())
题目四:已知广义表L=((x,y,z),a,(u,y,t)),从L中取出y的操作时?——此题简化
----------------------------------解析线-----------------------------------
解析:
标签: