【问题标题】:Implementing Enqueue and Dequeue for Queue using Alloy使用 Alloy 实现队列的入队和出队
【发布时间】:2013-03-16 19:40:43
【问题描述】:

具备以下条件:

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]{}

感谢任何帮助。

【问题讨论】:

  • 您到底遇到了什么问题?

标签: queue alloy


【解决方案1】:

您可以轻松定义入队:

pred Enq[q, q': Queue, n: Node] {
  q'.root = n and n.next = q.root
}

但出队并不那么容易。问题是您需要修改节点,而不是队列,以便对元素出列所需的最后一个节点进行更改。您实际上需要用“next”字段为空的不同节点替换队列中的倒数第二个节点 - 但由于您使用原子标识来表示节点唯一性,因此该节点实际上将是一个不同的节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2013-01-21
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多