我有一个程序可以在C语言中创建,插入,删除和销毁优先级队列。一切正常,但是我有一个任务可以使用户更轻松地创建队列。
int Error;
PrQueue* q1= create(&Error);
PrQueue* q2 = create(&Error);
PrQueue* q3 = create(&Error);
这是我创建优先级队列的方法。
PrQueue* create(int* Error)
{
PrQueue* Meta = (PrQueue*)malloc(sizeof(PrQueue));
if(Meta == NULL)
{
*Error = 1;
return NULL;
}
Meta->NrOfItems = 0;
Meta->Head = NULL;
*Error = 0;
return Meta;
}
这就是功能
typedef struct Element
{
int Data;
int Priority;
struct Element *Next;
struct Element *Prev;
} Element;
typedef struct
{
int NrOfItems;
struct Element *Head;
} PrQueue;
这就是结构。 所有这些代码部分都在不同的文件中。第一个是main.c,第二个是functions.c,第三个是.h头文件。 因此,我需要以某种方式使用户更容易在main中创建优先级队列,我应该以某种方式摆脱main中的指针符号。我真的不知道它的外观,但是据我了解,它不应在主体中使用*。有什么想法我应该如何改变?
谢谢!
答案 0 :(得分:1)
我的建议是将您的create()
函数转换为init()
函数;这样,用户就可以在其他对象内部和/或堆栈中而不是仅在堆上创建PrQueue
对象:
void init(PrQueue * Meta)
{
Meta->NrOfItems = 0;
Meta->Head = NULL;
}
这也意味着该功能不会失败,因此用户无需进行任何错误检查。
用户可以这样使用它:
int main(int argc, char ** argv)
{
PrQueue q;
init(&q);
[...]
}