关于用C语言实现数据结构中队列运算算法设计的一个细节而致命的问题
本人最近在实现一棵二叉树的层次遍历算法时遇到了一个头疼的问题,就是尽管逻辑上怎么看都没有问题,但是输出结果总是非常奇怪,出现了一些奇怪的字符,并且程序会因为这个函数的调用而崩溃… …
原来的运行结果:
出错原因
今天终于测试出了问题的原因所在:
原来是因为我所使用的循环队列在初始化时是赋给了队头和队尾-1!
之所以这样初始化是因为本以为编译器会“正常地”运算出取模结果,从而实现队列的循环存储——但是实际上C/C++竟然不会真正的带余除法!
如cout << (-1)%100 << endl ;
等待你的会是-1而不是99… …
这就直接导致了数组下标的出错… …所以程序会崩溃也就可以理解了… …
解决方法
知道了这一点之后,问题就迎刃而解了:只需要将原来初始化的值改为Maxsize就可以了!(具体要根据你所实现的队列的各种算法的逻辑结构来改)