一种基于结点入度变化的树结构可视化方法与流程

文档序号:20598844发布日期:2020-05-01 21:27阅读:288来源:国知局
一种基于结点入度变化的树结构可视化方法与流程

本发明涉及数据结构可视化领域,更具体地,涉及一种基于结点入度变化的树结构可视化方法。



背景技术:

程序设计可视化是指在计算机程序设计的相应阶段,实现算法、程序和数据结构的各种可视化变换,让程序员可以直观且生动地查看各种同步的数据关系动态视图。其中,动态视图即算法、程序和数据结构的各种具有可视特性的变换图示,可视化变换是指从算法、程序和数据结构的信息展现为动态视图的映像,从而在程序设计的相应阶段(包括程序的编辑、编译、调试以及执行),提供动态视图的可视化信息。数据结构可视化是程序设计可视化的主要内容,通过对算法和数据逻辑结构的自动抽象来完整直观地对数据结构可视化展示,最后实现算法、程序和数据结构的动态关系及演变过程,有助于程序员对程序代码有更加直接与深刻的理解。

树结构可视化是数据结构可视化的重要内容之一,其对于程序员理解和应用二叉树和树这一类典型的非线性数据结构具有重要意义。在程序调试过程中,当对二叉树或树进行操作时,有时因为程序员代码设计的错误,或者执行到一个二叉树或者树操作过程中的某个步骤时,会出现一种“类树结构”,如图1所示,其形态上与二叉树或树非常相似,每一个结点有若干个直接后继结点,但与之不同的是,在类树结构中,结点可能存在两个或两个以上的直接前驱结点,因此,一方面,程序员是否正确理解二叉树或树代码中出现的各种树结构特别是“类树结构”,对程序功能的正确性以及程序质量的提高具有重要意义;另一方面,“类树结构”往往比普通的二叉树或树复杂,单纯通过堆栈数据进行数据关系的判定存在较大的困难,因此在程序调试过程中,对“类树结构”进行直观和实时的可视化展示可以极大地帮助程序员正确理解当前的树结构状态,进而提高程序设计的调试效率。

而现有技术中的树结构可视化技术针对的都是单棵、完全符合“树型结构”定义的数据结构,而对于程序设计过程,特别是可视化调试过程,出现的非典型树型结构或者多棵树型结构,以上发明均未能提供相应的可视化方法。



技术实现要素:

针对的现有技术中树结构可视化技术针对的都是单棵、完全符合“树型结构”定义的数据结构的问题,并不能处理可视化过程中出现的非典型树型结构或者多棵树结构的问题,本发明提供一种基于结点入度变化的树结构可视化方法。

首先对文中涉及的相关多亲结点、类树、树结构等概念进行定义:

多亲结点:拥有次类双亲的结点称为多亲结点。

类树:在树结构中若存在多亲结点,则称此结构为类树结构。

树结构:包括二叉树、树和类树结构。特别地,孤立结点(即一个没有类双亲和类孩子的结点)也是树结构。

重新布局:按照某种布局算法,对原有结点的位置移动,一次可视化调试步骤触发一次重新布局。

本发明提供的一种基于结点入度变化的树结构可视化方法,包括以下步骤:

s1:检测是否有未执行完的目标代码,若有则进入s2,若没有未执行完的目标代码则结束流程;

s2:判断是否有一个结点发生变化,即是否发生一次可视化调试步骤,若是,则分析结点变化的类型;

s3:根据结点变化的类型进行可视化处理;

s4:输出数据。

在一种优选方案中,所述的结点均为树结构中的结点。其中,以结点x为根结点的树称为x树。

在一种优选方案中,采用二叉链表形式的链式存储结构来存储二叉树。结点(设为结点p)至少包含以下信息:一个数据元素和分别指向其左孩子结点(设为结点q)和右孩子结点(设为r)的两个指针,则称结点p为结点q和结点r的类双亲,结点q和结点r为结点p的类孩子。

类似地,采用孩子兄弟链表形式的链式存储结构来存储树。结点(设为结点p)至少包含以下信息:一个数据元素和分别指向其第一个孩子结点(设为结点q)和下一个兄弟结点(设为结点r)的两个指针,其形态与二叉链表形态相似,同样也称结点p为结点q和结点r的类双亲,结点q和结点r为结点p的类孩子。同时本专利将某结点的类双亲个数称为该结点的入度;将某结点的类孩子个数称为该结点的出度。当某结点的入度加一后,此时如果该结点的入度为一,则称新增的类双亲为主类双亲,否则该结点的入度大于一,则称其为次类双亲。当该结点的入度减少一后,此时如果该结点的入度大于零,且原主类双亲已不是该结点的类双亲,则根据某种规则指定某个次类双亲为新的主类双亲。

在一种优选方案中,所述的步骤s2中分析结点变化类型,包括新建一个结点、删除一个结点、修改一个结点的数据元素值、修改一个结点的指针值。

在一种优选方案中,在所述的s2中分析结点变化类型,当结点变化类型为新建一个结点时,其可视化步骤为,新建一个结点,此结点为树结构,为新的树结构分配新的布局空间,并将其可视化出来。所述的新的树结构中只有唯一的结点,该结点的入度和出度均为零,且其主类双亲、次类双亲和类孩子均为空。

在一种优选方案中,在所述的s2中分析结点变化类型,当结点变化类型为删除一个结点(设为结点p)时,其可视化步骤为,

s31.标记结点p为被删结点;

s32.若结点p的入度大于零,删除结点p和其主类双亲以及所有次类双亲之间的连线;

s33.若结点p的出度大于零,即在原树结构中结点p存在类孩子q,删除结点p和其所有类孩子之间的连线,且将结点q入度减一;

s34.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树;则为l分配新的布局空间,并将其移动至此空间;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局。

在一种优选方案中,在所述的s2中分析结点变化类型,当结点变化类型为修改一个结点的数据元素值时,其可视化方法为将对应结点的原数据元素值修改成新数据元素值。

在一种优选方案中,在所述的s2中分析结点变化类型,当结点变化类型为修改一个结点的指针值时,其可视化处理分以下三种情况:

s31.树结构中一个结点入度加一;

s32.树结构中一个结点入度减一;

s33.树结构中一个结点入度加一且一个结点的入度减一。

在一种优选方案中,所述的结点变化类型为修改一个结点(设为结点p)的指针值时,且其类孩子值由空值修改成某一非空值(设为结点q),即树结构中一个结点(即结点q)入度加一,其可视化处理步骤如下:

s311.在结点p和结点p的新类孩子q之间增加一条连线;

s312.将结点p的出度增加一,结点q的入度增加一;

s313.若结点q的入度等于一,则结点p为结点q的新主类双亲,保持结点p不动,将以p为根的树结构进行重新布局;

s314.否则,若结点q的入度大于一,则将结点p和结点q之间的连线置为特殊连线,其特殊连线表示某结点与其次类双亲之间的指针关系。

在一种优选方案中,所述的结点变化类型为修改一个结点(设为结点p)的指针值时,且其类孩子值由某一非空值(设为结点q)修改成空值,即树结构中一个结点(结点q)入度减一,其可视化处理步骤如下:

s321.删除结点p和其原类孩子q之间的连线;

s322.将结点p的出度减一,结点q的入度减一;

s323.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树,则为l分配新的布局空间,并将其移动至此空间;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局。

在一种优选方案中,所述的结点变化类型为修改一个结点(设为结点p)的指针值时,且其类孩子值由某一非空值(设为结点q)修改成另一非空值(设为结点r),即树结构中一个结点(即结点q)入度加一且一个结点(即结点r)的入度减一,其可视化处理步骤如下:

s331.删除结点p和其原类孩子q之间的连线,同时,在结点p和其新类孩子r之间增加一条连线;

s332.将结点q的入度减一,结点r的入度加一;

s333.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树;则为l分配新的布局空间,并将其移动至此空间;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局;

s334.若结点r的入度等于一,则结点p为结点r的新主类双亲,保持结点p不动,将以p为根的树结构进行重新布局;

否则,若结点r的入度大于一,则将结点p和结点r之间的连线置为特殊连线,其中特殊连线某结点与其次类双亲之间的指针关系。

与现有技术相比,本发明技术方案的有益效果是:

本发明提供一种基于结点入度变化的树结构可视化方法,本发明根据结点入度的变化分析调试过程中各种树型结构的实时变化情况,从而实施相应的布局,而不再是局限于固定代码的可视化演示;同时本发明提供的方法并不局限于单棵、完全符合“树型结构”定义的数据结构,还给出了非典型树型结构和多棵树型结构的树结构可视化方法。

附图说明

图1是本发明提供的基于结点入度变化的树结构可视化方法的总流程示意图;

图2是实施例2中分析结点变化类型,当结点变化类型为删除一个结点时,其可视化步骤流程图;

图3是实施例2中分析结点变化类型,当结点变化类型为修改一个结点的指针值,且一个结点入度加一时,其可视化步骤流程图;

图4是实施例2中步骤s31中变化后结点q的入度等于一的变化示意图;

图5是实施例2中步骤s31中变化后结点q的入度大于一的变化示意图;

图6是实施例2中分析结点变化类型,当结点变化类型为修改一个结点的指针值,且一个结点入度减一时,其可视化步骤流程图;

图7是实施例2中步骤s32中变化后结点q的入度等于零的变化示意图;

图8是实施例2中步骤s32中变化后结点q的入度大于零的变化示意图;

图9是实施例2中分析结点变化类型,当结点变化类型为修改一个结点的指针值,且一个结点入度加一且一个结点入度减一时,其可视化步骤流程图;

图10是实施例2中步骤s33中,变化后结点q的入度等于零,且结点r的入度等于一的变化示意图;

图11是实施例2中步骤s33中,变化后结点q的入度大于零,修改了结点q的主类双亲为结点p’,且结点r入度等于一的变化示意图;

图12是实施例2中步骤s33中,变化后结点q的入度等于零,且结点r入度大于一的变化示意图;

图13是实施例2中步骤s33中,变化后结点q的入度大于零,修改了结点q的主类双亲为结点p’,且结点r入度大于一的变化示意图。

其中:上述变化示意图中(a)为变化前状态,(b)为变化后状态。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,仅用于示例性说明,不能理解为对本专利的限制。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例一

一种基于结点入度变化的树结构可视化方法,如图1所示,包括以下步骤:

s1:检测是否有未执行完的目标代码,若有则进入s2,若没有未执行完的目标代码则结束流程;

s2:判断是否有一个结点发生变化,即是否发生一次可视化调试步骤,若是,则分析结点变化的类型;

s3:根据结点变化的类型进行可视化处理;

s4:输出数据。

在本实施例中,所述的结点均为树型结构中的结点。

实施例二

一种基于结点入度变化的树结构可视化方法,如图1所示,包括以下步骤:

s1:检测是否有未执行完的目标代码,若有则进入s2,若没有未执行完的目标代码则结束流程;

s2:判断是否有一个结点发生变化,即是否发生一次可视化调试步骤,若是,则分析结点变化的类型;

s3:根据结点变化的类型进行可视化处理;

s4:输出数据。

在本实施例中,所述的结点均为树结构中的结点。

在本实施例中,所述的步骤s2中分析结点变化类型,包括新建一个结点、删除一个结点、修改一个结点的数据元素值、修改一个结点的指针值。

在本实施例中,在所述的s2中分析结点变化类型,当结点变化类型为新建一个结点时,其可视化步骤为,新建一个结点,此结点为树结构,为新的树结构分配新的布局空间,并将其可视化出来。

在本实施例中,所述的新的树结构中唯一结点的入度和出度均为零,且其主类双亲、次类双亲和类孩子均为空。

在本实施例中,在所述的s2中分析结点变化类型,当结点变化类型为删除一个结点时,设该结点为结点p,其可视化步骤如图2所示,

s31.标记结点p为被删结点;

s32.若结点p的入度大于零,删除结点p和其主类双亲以及所有次类双亲之间的连线;

s33.若结点p的出度大于零,即原树结构中结点p存在类孩子q,删除结点p和其所有类孩子之间的连线,且将结点q入度减一;

s34.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树;则为l分配新的布局空间,并将其移动至此空间;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局。

在本实施例中,在所述的s2中分析结点变化类型,当结点变化类型为修改一个结点的数据元素值时,其可视化方法为将对应结点的原数据元素值修改成新数据元素值。

在本实施例中,在所述的s2中分析结点变化类型,当结点变化类型为修改一个结点的指针值时,其可视化处理分以下三种情况:

s31.树结构中一个结点入度加一;

s32.树结构中一个结点入度减一;

s33.树结构中一个结点入度加一且一个结点的入度减一。

在本实施例中,所述的结点变化类型为修改一个结点的指针值时,设该结点为结点p,且其类孩子值由空值修改成某一非空值,设其为结点q,即树结构中结点q入度加一,如图3所示,其可视化处理步骤如下:

s311.在结点p和结点p的新类孩子q之间增加一条连线;

s312.将结点p的出度增加一,结点q的入度增加一;

s313.若结点q的入度等于一,则结点p为结点q的新主类双亲,保持结点p不动,将以p为根的树结构进行重新布局,如图4所示;

s314.否则,若结点q的入度大于一,则将结点p和结点q之间的连线置为特殊连线,如图5所示。

在本实施例中,所述的结点变化类型为修改一个结点的指针值时,设该结点为结点p,且其类孩子值由空值修改成某一非空值,设其为结点q,即树结构中结点q入度减一,如图6所示,其可视化处理步骤如下:

s321.删除结点p和其原类孩子q之间的连线;

s322.将结点p的出度减一,结点q的入度减一;

s323.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树,则为l分配新的布局空间,并将其移动至此空间,如图7所示;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局,如图8所示。

在本实施例中,所述的结点变化类型为修改一个结点的指针值时,设该结点为结点p,且其类孩子值由某一非空值,设其为结点q修改成另一非空值,设其为结点r,即树结构中结点q入度加一且一个结点r入度减一,如图9所示,其可视化处理步骤如下:

s331.删除结点p和其原类孩子q之间的连线,同时,在结点p和其新类孩子r之间增加一条连线;

s332.将结点q的入度减一,结点r的入度加一;

s333.若结点q的入度等于零,则原树结构拆分出一棵新的树结构l,l是以结点q为根结点的子树,即q树;则为l分配新的布局空间,并将其移动至此空间,如图10和图12所示;

否则,若结点q的入度大于零,且修改了q的主类双亲为结点p’,且结点q和结点p’不在同一树结构中,则保持结点p’不动,将以p’为根的树结构进行重新布局,如图11和图13所示;

s334.若结点r的入度等于一,则结点p为结点r的新主类双亲,保持结点p不动,将以p为根的树结构进行重新布局,如图10和图11所示;

否则,若结点r的入度大于一,则将结点p和结点r之间的连线置为特殊连线,如图12和图13所示。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1