队列,双端队列

我的宗旨就是不打一行代码,哼.

队列就是先进先出,不多讲,想弄清楚的自行百度,但看我接下来的文字你并不需要知道那么多.

好了,前面我们讲到了顺序表也就是列表了,那我们用列表能否实现呢?毫无疑问是可以实现的,但是要拿列表实现队列需要insert()和pop(),前面一篇文章讲到了,使用insert()的操作是极其差的,即我们首先就得把它给抛弃掉,一定有更牛逼的方法.

那我们的链表能否实现呢?如果使用append()和popleft(),而append和popleff又都是O(1)的操作,完美解决.

好了,这里补充一个数组实现(数组相当于定长的列表,实在不懂跳过),数组能否实现呢?是可以实现的,但是数组其实是比较麻烦的,数组只有push和pop操作,我们只需要把值push后再往右移动他的下标个位置,而pop后再往做移动下标个位置,那么也是完美实现了,但是有可能array_size(这里你不能反映就是你不懂,跳过把)给的过大了,那么下标位置就得考虑了,这个时候可以使用取模,即使用元组的元素的个数+下标位置对array_size取模,也就是拿一串又一串数字在一个很长的容器里左右移动.

好了,这里继续补充一个双端队列,双端队列的意思是头和尾都能实现先进先出,这个时候不得不用到双端队列,双端队列基于双链表,只不过他把头部和尾部连在一起形成了双端链表,好了知道了双端链表,就可以实现双端队列了.不多讲了,你只需要知道有双端队列,双端队列由双端链表实现.

就这样就可以了.你非要问代码实现,import cllections import deque ,看源码一定写的比我好.

猜你喜欢

转载自www.cnblogs.com/chenyoude/p/9898982.html