6.5自引用结构

我之前第一次看的时候后面看的不是那么仔细,我嫌进度太慢了.因此我那时候看到这里的时候完全是一脸懵逼的,根本不知道这里写的是什么了.乱七八糟的.
但是这次不同,这次应该是第三次看,看的非常仔细每一个细节都弄懂,到现在.看的时候没什么难度.非常顺畅.
所以学新知识耐心还是比较重要的.

主函数暂时没什么需要说的.
通过getword读取单词.然后判断首字符是否是字母.
然后就是addtree函数和treeprint函数.
所以先看addtree函数.

talloc函数就是返回一个具有tnode结构大小并指向tnode结构的指针.(就是这个指针可以容纳这个结构.)
strdup函数就是将传入的参数复制到另一个地方,(具体什么用后面再看.)

adtree函数.
首先判断是不是新单词,判断是不是空指针,因为每个已经记录的单词都有地址而不是空指针,每个单词的下方都有两个空地址.
空指针的情况下将各个成员赋值.
如果不是空指针,那么就判断指针的成员与当前的这个参数用strcmp进行比较.并将对比结果复制到cond中.
匹配的话(strcmp函数的返回值为0)将计数成员+1.
小于或者大于这个成员进入左子树或右子书.
这个是递归的.
进入左右子树还会进行同样的判断.
判断是否是空指针,然后对比当前成员或进入左子树或右子树.
这几个判断式只执行一个,执行完后会返回当前的指针给上一级.
上一级会将这个指针放在当前这个节点的记录左右子树的成员中.
递归只用于查找,左右子树的指针只在上一级中.
最后将最上层的两个子树放入主函数的root中.

然后调用treeprint输出.
这个说出来会很复杂,试试吧.看上面的图能理解的快一些.
它首先递归调用到最左侧的那个节点a.
然后再向下判断的时候它的左子树是空的,判断式不通过,退出这个函数.回到节点a.
第一条语句完成.
第二条语句是打印节点a的内容.
然后进入节点a的右子树,如果存在的话还是进入这个右子树的左子树,这个右子树的左子树不存在的话输出这个节点a的右子树然后去找这个节点a的右子树的右子树,没有的话返回节点a然后再返回上级.
语言很难表达这么复杂的逻辑情况.看图理解能方便一些.

你可能感兴趣的:(6.5自引用结构)