问答题 2.  实现一个队列的数据结构,使其具有入队列、出队列、查看队列首尾元素、查看队列大小等功能。
【正确答案】与实现栈的方法类似,队列的实现也有两种方法,分别为采用数组来实现和采用链表来实现。下面分别详细介绍这两种方法。
   方法一:数组实现
   下图给出了一种最简单的实现方式,用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来指向队列的尾元素。
   
【答案解析】[考点] 如何实现队列