所以我有一个带有哨兵节点的通用双链队列结构:

// Queue node:
struct _QNode {
    struct _QNode *prev;     /* Previous list element. */
    struct _QNode *next;     /* Next list element.    */
};
typedef struct _QNode QNode;

// Queue object:
struct _Queue {
    QNode front;    // sentinel node at the front of the queue
    QNode rear;     // sentinel node at the tail of the queue
};


还有一个“ duct-tape”结构,用于将整数值加载到队列节点中

struct _Tape {
    int32_t payload;    // user data field
    QNode node;       // generic node
};


还有一个包装类IntegerQueue,将两者结合在一起。

我的问题是,如何访问要弹出的给定节点的有效负载变量?

最佳答案

利用您所拥有的,您可以构建不错的QNode列表。但是,如果您有一个这样的QNode队列,则只能访问其中的QNode,而不能访问Tape,至少不能以可接受的方式访问(您可能会争辩说,每个QNode都包含在Tape结构中,因此减去了一些从QNode的地址获取值,以获取Tape-address,但是如果其他人看到了,它会被枪杀)。
因此,我认为您可以通过某种方式将有效负载放入QNodes中。如果要使用C ++,则可以使用模板以一种通用的方式进行操作,在这里可以使用宏,也可以在Queue中将一个空指针放入然后将其强制转换为有效负载类型(这又使您获得了成功)。

09-25 20:19