已解决
python特殊循环队列_队中元素个数代替队尾指针
来自网友在路上 187887提问 提问时间:2023-11-10 11:22:14阅读次数: 87
最佳答案 问答题库878位专家为你答疑解惑
对于循环队列来说,如果知道队头指针和队中元素个数,则可以计算出队尾指针。也就是说,可以用队中元素个数代替队尾指针。设计出这种循环队列的判队空、进队、出队和取队头元素的算法。
本例的循环队列包含data 数组、队头指针 front和队中元素个数count,可以由front 和count求出队尾位置,公式如下。
初始时front和count均置为0。队空条件为count==0;队满条件为count==MaxSize;元素e进队操作是先根据上述公式求出队尾指针rearl,将rear1循环增1,然后将元素e放置在rearl处;出队操作是先将队头指针循环增1,然后取出该位置的元素。设计本例的循环队列类CSqQueuel如下:
#rear=(self.front+self.count)%MaxSize
#队空:count==0
#队满:count==Maxsize
MaxSize = 5
class CircleQueue: # 循环队列"""这种循环队牛逼之处就是:中元素个数代替尾指针,队满不存在空值,可存Maxsize个元素"""def __init__(self):self.data = [None] * MaxSize # 初始空间self.front = 0self.count = 0def push(self, e): # 元素e进队rear=(self.front+self.count)%MaxSize #得到队尾指针assert self.count!=MaxSize # 判断队满rear=(rear+1)%MaxSize #和前面的循环队列一个道理self.data[rear] = eself.count+=1def is_empty(self): # 判断队空return self.count == 0def pop(self): # 元素出队assert not self.is_empty() # 先判断是否为空self.count-=1self.front = (self.front + 1) % MaxSizereturn self.data[self.front]def gethead(self): # 获取头元素assert not self.is_empty()return self.data[(self.front + 1) % MaxSize]def getsize(self): # 获取队列长度,在front下标小于rear时,size可以直接用rear-front获取,但是如果边删边加,导致rear小于front,此方法出错rear = (self.front + self.count) % MaxSizereturn (rear - self.front + MaxSize) % MaxSize #该式满足上叙所有情况def dispaly(self):q=self.frontif self.count != 0: #判断队空for i in range(self.getsize()):q = (q+1)%MaxSize #符合两种情况的式子print(self.data[q], end=",")else:return Nonedef pushk(qu, k, e):n = qu.getsize()if k < 1 or k > n + 1: #k必须正常return Falseif k <= n:for i in range(1, n + 1): #边删边进if i == k: #插个队,它插完,后面的再边删边进qu.push(e)x = qu.pop()qu.push(x)e1se: qu.push(e)return Truedef popk(qu, k):n = qu.getsize()assert 1 <= k <= nfor i in range(1, n + 1): #和上面的思想一样x = qu.pop()if i != k:qu.push(x)else:e = x # 取第k个出队的元素return eif __name__=="__main__":hh = CircleQueue()# print(hh.is_empty())# hh.push(0)# hh.push(1)# hh.push(2)# hh.push(3)# print(hh.getsize())# hh.dispaly()
# True
# 4
# 0, 1, 2, 3,
# Process
# finished
# with exit code 0
# #当rear<front时
# hh.push(3)
# hh.push(4)
# hh.push(5)
# hh.push(6)
# hh.pop()
# hh.pop()
# hh.pop()
# hh.push(7)
# hh.push(8)
# print(hh.getsize())
# hh.dispaly()
# 3
# 6,7,8,
# Process finished with exit code 0
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- CSS中常用的伪元素选择器
- XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
- Web 自动化神器 TestCafe(二)—元素定位篇
- 代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
- 代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
- JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素
- Arcgis js Api日常天坑问题3——加载geojson图层,元素无属性
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 力扣.82删除链表中的重复元素(java语言实现)
猜你感兴趣
版权申明
本文"python特殊循环队列_队中元素个数代替队尾指针":http://eshow365.cn/6-37181-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: epoll实现 IO复用
- 下一篇: uniapp分包