Что нужно изменить, чтобы сделать мою программу на C более удобной для пользователя? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть программа, которая создает, вставляет, удаляет и удаляет приоритетную очередь в 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.Я действительно не знаю, как это должно выглядеть, но, как я понимаю, он не должен использовать * в основном.Есть идеи, что и как я должен изменить?

Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Моя рекомендация - преобразовать вашу функцию create() в функцию init();это позволит пользователю создавать PrQueue объекты внутри других объектов и / или в стеке, а не только в куче:

void init(PrQueue * Meta)
{   
   Meta->NrOfItems = 0;
   Meta->Head = NULL;
}

Это также означает, что нет возможности сбоя функции, поэтомупользователю не нужно проверять ошибки.

Пользователь может использовать его следующим образом:

int main(int argc, char ** argv)
{
   PrQueue q;
   init(&q);
   [...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...