鱼C论坛

 找回密码
 立即注册
查看: 1339|回复: 3

[已解决]Python的循环队列(circle queue)中等号所引发的问题

[复制链接]
发表于 2018-12-13 17:43:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 苏丛 于 2019-1-17 16:24 编辑

这是用Python写的一个循环队列
  1. class Node:
  2.     def __init__(self, value):
  3.         self.val = value
  4.         self.next = self.pre = None
  5. class MyCircularQueue:

  6.     def __init__(self, k):
  7.         self.size = k
  8.         self.curSize = 0
  9.         self.head = self.tail = Node(-1)
  10.         self.head.next = self.tail
  11.         self.tail.pre = self.head

  12.     def enQueue(self, value):
  13.         if self.curSize < self.size:
  14.             node = Node(value)
  15.             node.pre = self.tail.pre
  16.             node.next = self.tail
  17.             node.pre.next = node.next.pre = node
  18.             self.curSize += 1
  19.             return True
  20.         return False

  21.     def deQueue(self):
  22.         if self.curSize > 0:
  23.             node = self.head.next
  24.             node.pre.next = node.next
  25.             node.next.pre = node.pre
  26.             self.curSize -= 1
  27.             return True
  28.         return False

  29.     def Front(self):
  30.         return self.head.next.val

  31.     def Rear(self):
  32.         return self.tail.pre.val

  33.     def isEmpty(self):
  34.         return self.curSize == 0

  35.     def isFull(self):
  36.         return self.curSize == self.size
复制代码

就是第19行那两个等号,
我想问是那个先执行的,
按照代码逻辑,应该是先执行
  1. node.pre.next = node
复制代码

再执行
  1. node.next.pre = node
复制代码

这样的话就是从左到右,

但是我验证了一下,Python是从右到左执行的
这是我的验证方法
  1. class Node:
  2.     def __init__(self, value):
  3.         self.val = value
  4.         self.pre = self.next = None

  5. # 生成一些对象
  6. ojs = list()
  7. for i in range(5):
  8.     ojs.append(Node(i))

  9. # 将对象的尾部相连
  10. for i in range(4):
  11.     ojs[i].next = ojs[i+1]

  12. # 将对象的头部相连
  13. for i in range(1, 5):
  14.     ojs[i].pre = ojs[i-1]

  15. d = Node(666)

  16. ojs[4].pre.pre = ojs[4].pre = d

  17. # ojs[4].pre = ojs[4].pre.pre = d
  18. print(ojs[4].pre.pre) #执行结果为:None,说明是从右到左
复制代码


这里就出现了矛盾,所以究竟是什么样一个顺序
请各位大神们不吝赐教
最佳答案
2018-12-13 18:57:51
参考这个帖子https://www.v2ex.com/amp/t/443384,例如a = b =c= x,应该是a = x,b = a,c=a
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-16 14:30:43 | 显示全部楼层
我知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-12-13 18:57:51 | 显示全部楼层    本楼为最佳答案   
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 20:41:43 | 显示全部楼层
学学看看 发表于 2018-12-13 18:57
参考这个帖子https://www.v2ex.com/amp/t/443384,例如a = b =c= x,应该是a = x,b = a,c=a

谢谢,这个值得好好看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 15:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表