C:排队:如何创建指向尾部的新指针?

C:排队:如何创建指向尾部的新指针?,c,queue,doubly-linked-list,C,Queue,Doubly Linked List,好的,我有一个队列.h,上面写着: typedef struct { int key; int value; } data_t; typedef struct queueNode { struct queueNode *next, *prev; data_t *data; } QueueNode; h typedef struct queueType { QueueNode *head; QueueNode *tail; } Queue; 我现

好的,我有一个
队列.h
,上面写着:

typedef struct {
    int key;
    int value;
} data_t;

typedef struct queueNode {
    struct queueNode *next, *prev;
    data_t *data;
} QueueNode;
h
typedef struct queueType {
    QueueNode *head;
    QueueNode *tail;
} Queue;
我现在的目标是找出如何在队列中迭代以找到特定的节点,然后在所述队列中找到特定的值

我看到的问题是,我没有办法说
Queue{?}
来将我带到特定的
queueNode
,我也不知道有什么办法可以说:

for queueNode in queue{scan return `queueNode` if valid}. 

我最近已经跨过了计算如何使用全局变量大小来准确知道有多少个
queueNodes
的门槛,但这仍然给我留下了相同的问题。

对于这样的结构,迭代列表的常用方法是:

使用
next

QueueNode *queue_find_forward(Queue *queue, int key)
{
    if(queue == NULL)
        return NULL;

    QueueNode *current = queue->head;

    while(current)
    {
        if(current->data->key == key)
            return current;

        current = current->next;
    }

    // no node has the requested key
    return NULL;
}
使用
prev

QueueNode *queue_find_backwards(Queue *queue, int key)
{
    if(queue == NULL)
        return NULL;

    QueueNode *current = queue->tail;

    while(current)
    {
        if(current->data->key == key)
            return current;

        current = current->prev;
    }

    // no node has the requested key
    return NULL;
}
但是请注意,队列必须正确初始化,节点必须 正确初始化后,最后一个元素的
下一个
指针必须指向
NULL
,第一个元素的
prev
指针必须指向
NULL
as 嗯

这两个函数都在
循环中执行检查:

        if(current->data->key == key)
我决定使用
来确定要查找的元素。你当然可以 如果更改该值,则可以检查该值或其他属性,或者 两者的结合。这取决于你(或者很可能是你的任务) 正在进行)。重要的是,一旦你完成了,你就要离开这个循环 找到你的元素

struct queueNode
中,我要更改
data\u t*data
数据\u t数据。我不明白
拥有指向
数据的指针的好处在于,您需要分配内存
为了它,而且也必须释放它。这将增加代码量
你需要为此写作。指针只有在您想要一个数组时才有用
数据\u t
每个节点的对象,但如果不将其作为指针,则会使
最后对你来说更容易。

你能告诉我如何从第一个到下一个吗?你能告诉我怎么从一个到下一个吗?你能想象在一个链条中,这些技术会让你一个接一个地看所有的东西吗?然后你需要确定正确的一个。如果您在每一步中都进行计数,那么您就有一个类似于数组的索引。如果你看钥匙,你就可以搜索。这就是问题所在。从头部(第一个queueNode)我可以用它的下一个值访问下一个queueNode,从那里我可以用它的下一个值访问它后面的一个(所以下一个->下一个->下一个->下一个->数据)。问题是,这些队列中可能有超过20个节点,我不知道如何乘以“下一个->的数量与访问相应queueNode的大小相关的语句。添加数据\u t*数据;这不是我的电话。我无法更改queue.h文件中的任何内容,只能更改queue.c文件。