Существуют ли стандартные реализации Queue для C? - PullRequest
7 голосов
/ 15 ноября 2010

Существует ли какая-либо реализация структуры данных Queue, которая «поставляется» с C, или мне придется разрабатывать свою собственную (это для школьного проекта, поэтому я должен использовать что-то, что либо существует в стандартной установке gcc, либо должен реализовать ее).сам!)

А как насчет других общих структур данных, таких как связанные списки, стеки и т. д.?

Спасибо

Ответы [ 8 ]

22 голосов
/ 15 ноября 2010

Попробуй это.Unix поставляется с несколькими видами связанных списков - вы можете использовать один из них для создания других, возможно, основанных на списке структур, таких как стек.

man queue
2 голосов
/ 28 апреля 2017

Нет.Но вот очень простая реализация:

typedef struct node {
   int val;
   struct node *next;
} node_t;

void enqueue(node_t **head, int val) {
   node_t *new_node = malloc(sizeof(node_t));
   if (!new_node) return;

   new_node->val = val;
   new_node->next = *head;

   *head = new_node;
}

int dequeue(node_t **head) {
   node_t *current, *prev = NULL;
   int retval = -1;

   if (*head == NULL) return -1;

   current = *head;
   while (current->next != NULL) {
      prev = current;
      current = current->next;
   }

   retval = current->val;
   free(current);

   if (prev)
      prev->next = NULL;
   else
      *head = NULL;

   return retval;
}

Полный источник здесь

2 голосов
/ 15 ноября 2010

Вы должны реализовать свой собственный.C имеет очень мало с точки зрения структур данных и вынуждает вас прибегать к спорным приемам для реализации абстрактных типов данных: посмотрите статью «Неполные типы как абстракции», если вы можете ее найти, или посмотрите, как принципы применяются, скажем, в Файл PolarSSL bignum.h .C ++, с другой стороны, должен позволять вам делать практически все, что вы можете делать в C, и давать вам способы реализации абстрактных структур данных.

0 голосов
/ 13 мая 2016

Использовать BSB lib. sys / queue.h и sys / tree.h иметь реализации различных списков и деревьев.

0 голосов
/ 29 января 2016

Не совсем стандарт, но во многих системах есть bsd/sys/queue.h и bsd/sys/tree.h, которые являются библиотеками на основе макросов.

См. Документацию здесь .

0 голосов
/ 15 ноября 2010

Если это «школьный проект», то реализация собственных структур данных может быть включена в схему маркировки, и использование библиотечного вызова может помешать экзаменатору присвоить эти оценки.

Стандартная библиотека ISO C не содержит таких структур данных, но GNU libc охватывает не только стандарт ISO. Это включает Трубы и FIFO , которые могут удовлетворить ваши требования.

0 голосов
/ 15 ноября 2010

Вы можете использовать именованный канал . Это структура данных FIFO и является частью стандарта posix. Если все, что вы хотите, это задний ход и убрать с фронта, он будет работать. Вам нужно будет отслеживать границы сообщений вручную, возможно, если первый элемент будет равным количеству байтов в следующем сообщении.

0 голосов
/ 15 ноября 2010

Вы должны реализовать свои собственные структуры данных, но существует множество библиотек структур данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...