关于实验五第三个实验“比赛问题”的一些看法


研究了“比赛问题”实验后,总结出关于算法的个人看法。

由于是以比赛方式建立树,所以应该从叶子结点开始输入;如果 把叶子结点看做第一层,那么往上的第二层直到树的根部都是从叶子结点两两往上筛选出来的,也就是两两比较大小最终输出的。

那么,细节:怎样实现两两比较?

我的想法是,通过二维数组来存储数据,也就是每一列就是一场比赛的结果,可以通过二维数组的相互比较来实现数据的比较。由于使用的是链表结构的存储方式,同时为了配合结构体指针的使用,这种二维数组存储究竟是使用普通的数组结构还是使用数组指针来实现,我还是没有底,毕竟指针尤其是数组指针这东西使用起来多少还是有些不顺手,果然还是普通数组用起来舒服,虽然没有指针用起来灵活。虽然最后我选择了数组指针,但实际上还用不好。

伪代码:

1、输入比赛数据,并将其一一赋予结构体指针bt指向的data成员;

2、初始化二维数组指针(* count)[i][n]=NULL;

3、将bt指向的数据data赋予二维数组指针

//这就是使用数组指针的关键,使用指针的话传递结构体指针指向的数据会更方便些。//

4、if单列数据存储到数组到达两行,数组列数增加,行下标归0,也就是

if(i<1)
break;
else
{++n;i=0;}

这也能方便后面的比较,也就是比较完一组数据后只需要++i和++n就可以了。

以上一段是位于构造函数中的。因为题目设置的情景不同,也就无法按照通常的先遍历后处理的思路进行,遍历只能放在后面。我觉得比较什么的其实不是难事,难的是怎样把输入的数据随机存储起来以便后面的使用,而不是输入了显示了就过了。每次比较过后结果的存储是必要的,也是关键。

当然,前面说的都是静态的过程,也就是把所有的叶子结点都输入后才开始实现处理操作。动态的操作效果是做不出来的了。

猜你喜欢

转载自blog.csdn.net/z1094219402/article/details/41928441