【发布时间】:2015-03-06 19:23:18
【问题描述】:
您好,我正在制作一个 Queue 抽象数据类型,但遇到了一个问题,我会尽可能清楚地解释。 基本上我有两个结构,一个用于元素,一个用于队列(因此您可以初始化多个队列)。
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;
}
我遇到的问题是对这段代码进行了万无一失。例如,我在 main 函数中初始化了我的第一个队列。
struct queue* first = make_new_queue(first);
但是如果有人在代码中间的某个地方再次尝试做同样的事情,请写:
first = make_new_queue(first);
它覆盖它并使头和尾指针为空。我想不通的是如何使我的 make_new_queue 函数更好,并检查我提供的队列中是否有东西,但仍然让我初始化空队列。
对不起我的英语。我希望你明白我想做什么。谢谢。
【问题讨论】:
-
您的代码无论如何都不会初始化结构,它会初始化 a 结构 但您没有返回指向它的指针,因此它不起作用,并试图防止这是不可能的,只是不要让任何傻瓜使用你的代码。
-
您可以创建一个函数来分配和返回一些新结构,而无需将其他结构传递到那里(为什么要这样做?)。
标签: c struct functional-programming queue