嗨,我正在制作一个队列抽象数据类型,我遇到了一个问题,我将尽力解释得尽可能清楚。 基本上我有两个结构,一个用于元素,一个用于队列(因此您可以初始化多个队列)。
struct element
{
TYPE value;
struct element* next;
};
struct queue
{
struct element* head;
struct element* tail;
int element_counter;
};
我有一个函数可以初始化我的队列结构。
int make_new_queue(struct queue* name)
{
name = malloc(sizeof(struct queue));
name->head = NULL;
name->tail = NULL;
name->element_counter = 0;
}
我遇到的问题是让这段代码万无一失。例如,我在主函数中初始化了第一个队列。
struct queue* first = make_new_queue(first);
但是如果有人尝试在代码中间的某个地方再次做同样的事情,请写:
first = make_new_queue(first);
它会覆盖它并使头指针和尾指针为 NULL。我不明白的是如何使我的 make_new_queue 函数更好,并检查队列中是否有我提供的东西,但仍然让我初始化空队列。
抱歉我的英语不好。我希望你明白我想做什么。谢谢。
最佳答案
将其初始化为NULL
并将指针传递给指针:
void make_new_queue(struct queue **name)
{
if (*name != NULL) return; /* Yet initialized ? */
*name = malloc(sizeof(struct queue));
if (*name == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
*name->head = NULL;
*name->tail = NULL;
*name->element_counter = 0;
}
struct queue *first = NULL;
make_new_queue(&first);
关于c - 需要检查struct是否已经初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906110/