今天是2019年的第一天,在听着时间的朋友来写下我这第一篇博客,罗胖在开头说到“做事的人,因为做事,让他们的生命处于上升期。”今天就是我做的第一次事。
那么,开始:
队列:
在我眼里是一列数组,他的排序是有意义的,当然,如果我追究他每一个数的位置,那当然很好,但是这对于程序很复杂。
举个例子有个题目
首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的QQ啦——摘自《啊哈算法》
这当然可以用每一次把数字列完,再运算。但是这显然很复杂,时间复杂度很高,所以我们可以进行优化,把没意义的东西去掉,这显然,每一次运算后的数组,除了头部两个数字,之后的所有数字,都是最后才用到,而且这里涉及数字的删除和最后一个数字的加入,如果用链表就太复杂了,这里很巧。
啊哈算法的作者,很厉害,他就用了一个整形变量叫head,来当计数器标记每一次开始的时候数组的第一个数字,同理,有一个tail来标记最后一个数字,每一次运算,就移动head和tail即加减他们就可以实现这题目数组的变化。
栈:
这里也同样,不过这里和队列有点不同,栈是只能在一段进进出出,其实和队列是差不多的,但是就像做数学题目,有数学归纳法,有几何法等等。这里的栈就是另外一种做法,设置一个top变量,然后进行加减,就可以进行数组的出栈和入栈。具体的例子我之后会补充。