当前位置:   article > 正文

队列的顺序表实现(python实现)_用顺序表实现队列python

用顺序表实现队列python

队列是一种先进先出(FIFO)的数据结构,因此对队列的操作涉及到队列的头部和尾部。若用python中的顺序表(list)实现,出队用pop(0),入队用append()实现,则删除list头部数据的开小较大,不是一种高效的实现。但可是使用list作为储存队列的空间,实现队列需要一个头部元素位置的引用,以及当前队列的长度。具体实现原理如下:

 由上图可以总结出实现的思路:

  • 用一个固定大小的列表存储队列元素,此外每次操作后需更新队头位置,以及队列长度。
  • 入队时,每次在队尾位置后添加元素,若队尾位置到了最后且列表还有空间,则在0位置添加元素。
  • 入队时,若队列长度达到了列表的容量则需开辟一块更大的空间,此时需要将队列全部元素取出,放到新的列表中,且队头位置为0。
  1. #基于顺序表实现的队列
  2. class SQueue():
  3. def __init__(self,init_len=8):
  4. self._len=init_len #容量
  5. self._elems=[0]*init_len #存储元素的list
  6. self._head=0 #队头位置
  7. self._num=0 #队里元素个数
  8. def is_empty(self): #判断队列是否为空
  9. return self._num==0
  10. def peek(self): #获取队头的元素
  11. if self.is_empty():
  12. print("当前队列为空")
  13. return
  14. return self._elems[self._head]
  15. def dequeue(self): #出队
  16. if self.is_empty():
  17. print("当前队列为空")
  18. return
  19. e=self._elems[self._head]
  20. self._num-=1
  21. self._head=(self._head+1)%self._len
  22. return e
  23. def __extend(self): #扩充容量
  24. old_len=self._len
  25. self._len*=2
  26. new_elems=[0]*self._len
  27. for i in range(old_len):
  28. new_elems[i]=self._elems[(self._head+i)%old_len]
  29. self._elems=new_elems
  30. self._head=0
  31. def enqueue(self,e): #入队
  32. if self._num==self._len:
  33. self.__extend()
  34. self._elems[(self._head+self._num)%self._len]=e
  35. self._num+=1

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/802977
推荐阅读
相关标签
  

闽ICP备14008679号