【问题标题】:How create a new queue如何创建一个新队列
【发布时间】:2017-05-07 08:42:04
【问题描述】:

我是 C 编程新手。我尝试编写很多程序以变得更好 :) 但此刻我陷入了一个愚蠢的境地。

我有一个任务是创建一个优先级队列。我一开始就得到了这两个结构。

struct q_elem_s {
char* name;
int priority;
struct q_elem_s *next;
};

struct PrioQueue {
int size;       //size of the queue
q_elem *root; //Beginn of the queue
};

通常我对队列没有问题,但我对第二个结构感到困惑。

所以我的想法:

PrioQueue* pqueue_new() {
q_elem = malloc(sizeof(q_elem_s));
return NULL;
}

感谢您的帮助。

【问题讨论】:

    标签: c struct queue


    【解决方案1】:

    首先,您的代码中有几个错误。 我在这里向您解释第二种结构的含义以及创建新优先级队列的正确函数应该是什么。 我还在您的代码中引入了必要的更改。

    第一个结构定义了队列中的单个节点。 而第二个结构表示单个队列 -

    struct PrioQueue {
      int size;       //size of the queue
      struct q_elem_s *root; //Beginn of the queue
    };
    

    struct q_elem_s * root 是头节点还是根节点。

    你的函数应该看起来像 -

    struct PrioQueue* pqueue_new() {
        struct PrioQueue *queue = malloc(sizeof(struct PrioQueue));
        queue->root = NULL;
        return queue;
    }
    

    【讨论】:

    • 非常感谢。这对我帮助很大。
    【解决方案2】:

    您的函数pqueue_new 有两个任务:它为prio 队列结构分配内存并初始化新结构。新结构应该是空的,即它的大小是 tero 并且它还没有任何节点。返回值必须是新优先队列的句柄:

    PrioQueue* pqueue_new() {
        PrioQueue *q = malloc(sizeof(*q));
    
        if (q) {
            q->size = 0;
            q->root = NULL;
        }
    
        return q;
    }
    

    注意事项:

    • 您当前的代码没有PrioQueue 类型,只有struct PrioQueue。您可以使用tyedef 使PrioQueue 成为“struct PrioQueue”的同义词。
    • 分配失败时该函数可以返回NULL。这意味着检查返回的指针是调用代码的任务。
    • 请注意,您有两种类型的对象:队列节点和保持结构,即队列本身。每个队列有一个队列对象和零到多个节点对象。
    • 仅当您将某些内容推送到队列时才会分配队列节点。空队列没有任何节点。
    • 您还应该编写一个匹配的pqueue_delete,它会清理所有节点并释放为队列本身分配的内存。

    【讨论】:

    • 非常感谢。这对我帮助很大。
    猜你喜欢
    • 2013-04-28
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2019-07-21
    • 2013-11-15
    相关资源
    最近更新 更多