拥有以下内容:
sig Queue { root: Node }
sig Node { next: lone Node }
fact nextNotReflexive { no n:Node | n = n.next }
fact nextNotCyclic { no n:Node | n in n.^next }
任何人都可以帮助实施Enq和Deq吗?
pred Enq[q,q':Queue, n:Node]{}
pred Deq [q,q':Queue]{}
感谢任何帮助。
答案 0 :(得分:2)
您可以轻松定义入队:
pred Enq[q, q': Queue, n: Node] {
q'.root = n and n.next = q.root
}
但出列并不是那么容易。问题是您需要修改节点而不是队列,以便更改出队列所需的最后一个节点。实际上,您需要使用其“下一个”字段为空的不同节点替换队列中的倒数第二个节点 - 但由于您使用原子标识来表示节点唯一性,因此该节点实际上将是不同的节点。