我爱编程

数据结构与算法分析 chapter03-表、栈和队列

2018-06-02  本文已影响23人  one_zheng

1.表(TODO)

2.栈

方法调用

3.队列

队列的数组实现

  对于每一个队列数据结构,我们保留一个数组theArray以及位置front和back,它们代表队列的两端。我们还要记录实际存在于队列中的元素的个数currentSize。下图表示某个中间状态的一个队列

array.png
 操作应该是清楚的。为使一个元素x入队(即执行enqueue),我们让currentSizeback增1,然后置theArray[back]=x。 若使元素dequeue(出列),我们置返回值为theArray[front],且currentSize减1,然后使front增1。也可以有其他的方法(将在后面讨论)。现在论述错误检测。
 上述实现存在一个潜在的问题。经过10次enqueue后队列似乎是满了,因为back现在是数组的最后一个下标,而下一次再enqueue就会是一个不存在的位置。然而,队列中也许只存在几个元素,因为若干元素可能已经出队了。像栈一样,即使在有许多操作的情况下队列也常常不是很大。
 简单的解决方法是,只要frontback到达数组的尾端,它就又绕回道开头。下面诸图显示在某些操作期间的队列情况。这叫做循环数组的实现。
 实现回绕所需要的附加代码是极小的(不过它可能使得运行时间加倍)。如果frontback增1导致超越了数组,那么其值就要重置到数组的第一个位置。
queue.png
队列为空时(back=fromt-1),队列的大小可以通过比较back跟front隐式地算出。
上一篇 下一篇

猜你喜欢

热点阅读