设计目的:比较系统中最先设定好的一些文件夹或文件(注册表项或注册表值)是否被修改过(删除、添加、修改)。
设计分析:
        1、需要预先存取下来需要比较的那些文件夹(注册表项)、文件(注册表值)的特征值(可以判断是否有被修改的值)
        2、开始做比较的时候需要读出现有值和预存值做比较,得出结果。
扩展需求:文件夹(注册表项)的比较如果是它的子文件夹(子注册表项)有修改也认为这个是有修改的,这样的话其实就是比较一颗树。
任务目标:设计数据结构和算法查找出指定文件夹或文件存特征信息,并储存,到需比较时刻,用同样的方法取出信息做比较、做记录。不知道我有没有把我要做的东西说明白,我现在尝试的做法是比较笨的方法,是设置了一个树型算法,用next指针指向它的同级节点(同一文件夹下的文件或子文件夹),child指针指向文件夹的其中一个子项。其他的就是用这个子项的next连起来,当然为了操作我还设置了present和before指针,然后我给每一个节点都取一个唯一的索引号和一个能定义节点位置和它父节的字符串,如1.1表示它的上一层是1,它是上一层的第一个子项。如果它是文件夹则它的第一个子项为1.1.1,它的下一个兄弟则为1.2,这样的设置纯粹是为了还原正棵树,这样就能把一个树连起来了,之后可以把这个树一个一个节点存起来到文件里,回读的时候也能按文件把树还原。然后用一个数据库按刚说的唯一索引号记录下来每项的特征值,待比较时用。
    上我的设计是能达到我的要求的,可是现在有问题出现了。主要表现在这个树较大或很大的时候(我用注册表测试故意测整个(HKEY_CLASSES_ROOT)表项,HKEY_LOCAL_MACHINE不敢测了,更大,其他三项看起来还凑合):
 1、内存占用超大,在我现在电脑上大约占100多M。
 2、用时很长,从根开始构出这个树要花大约3分钟时间。如果从文件恢复大约半分钟。基于这样那如果两棵树的比较所用时间就更不敢想象了。
 3、也是现在最严重的问题,树太大时,我释放我的树时(递归释放)程序会崩溃,提示是delete节点时出问题,分析是因为delete的地址不对,再深层次是因为树太大,递归得太深,可能已经超出了栈的上限,所以有些地址已经不对了,所以树稍小点的时候是没有问题的(算法应该是没有问题)。哎,总算把问题说完了,现在就是请各位高人给小弟指点,怎么解决我的问题,有更好的算法实现方式的,或者解决资源盒效率的问题。万分感谢