【正确答案】与实现栈的方法类似,队列的实现也有两种方法,分别为采用数组来实现和采用链表来实现。下面分别详细介绍这两种方法。
方法一:数组实现 下图给出了一种最简单的实现方式,用front来记录队列首元素的位置,用rear来记录队列尾元素往后一个位置。入队列的时候只需要将待入队列的元素放到数组下标为rear的位置,同时执行rear+,出队列的时候只需要执行front+即可。
示例代码如下:
class MyQueue:
def __init__(self):
self.arr=[]
self.front=0 #队列头
self.rear=0 #队列尾
#判断队列是否为空
def isEmpty(self):
return self.front==self.rear
#返回队列的大小
def size(self):
return self.rear-self.front
#返回队列首元素
def getFront(self):
if self.isEmpty():
return None
return self.arr[self.front]
#返回队列尾元素
def getBack(self):
if self.isEmpty():
return None
return self.arr[self.rear-1]
#删除队列头元素
def deQueue(self):
if self.rear>self.front:
self.front+=1
else:
print "队列已经为空"
#把新元素加入队列尾
def enQueue(self,item):
self.arr.append(item)
self.rear+=1
if __name__=="__main__":
queue=MyQueue()
queue.enQueue(1)
queue.enQueue(2)
print "队列头元素为:"+str(queue.getFront())
print "队列尾元素为:"+str(queue.getBack())
print "队列大小为:"+str(queue.size())
程序的运行结果为:
队列头元素为:1
队列尾元素为:2
队列大小为:2
以上这种实现方法最大的缺点为:出队列后数组前半部分的空间不能被充分地利用,解决这个问题的方法为把数组看成一个环状的空间(循环队列)。当数组最后一个位置被占用后,可以从数组首位置开始循环利用,具体实现方法可以参考数据结构的课本。
方法二:链表实现 采用链表实现队列的方法与实现栈的方法类似,分别用两个指针指向队列的首元素与尾元素,如下图所示。用pHead来指向队列的首元素,用pEnd来指向队列的尾元素。
【答案解析】[考点] 如何实现队列