Библиотека для Структур Основных данных, таких как Очередь, в C

Очень общее определение основного различия между функцией и методом :

Функции определены вне классов, а методы определены внутри и часть классов.

7
задан coffee-grinder 6 March 2014 в 06:17
поделиться

4 ответа

Похоже, это хороший кандидат для TAILQ_ *?

#include <sys/queue.h>

«мужская очередь» даст более подробную информацию - там есть простые списки, хвостовые очереди и кольцевые очереди. Это макросы, которые вам нужно прикрепить к вашим собственным структурам, а не к классам, конечно.

Код вашего сценария будет выглядеть примерно так (я должен был заставить add_to_queue возвращать какой-то код для проверки на наличие ошибок, и также избегайте глобальных переменных, но, надеюсь, меня простят в этом примере):

#include <stdio.h>
#include <stdlib.h>
#include <sys/queue.h>

TAILQ_HEAD(tailhead, entry) head;

struct entry {
  char c;
  TAILQ_ENTRY(entry) entries;
};

void add_to_queue(char ch) {
  struct entry *elem;
  elem = malloc(sizeof(struct entry));
  if (elem) {
    elem->c = ch;
  }
  TAILQ_INSERT_HEAD(&head, elem, entries);
}

int main(int argc, char *argv[]) {
  char ch = 'A';
  int i;
  struct entry *elem;

  TAILQ_INIT(&head);
  for (i=0; i<4; i++) {
    add_to_queue(ch);
    ch++;
    add_to_queue(ch);

    elem = head.tqh_first;
    TAILQ_REMOVE(&head, head.tqh_first, entries);
    free(elem);
  }
  exit(0);
}
12
ответ дан 7 December 2019 в 01:25
поделиться

Отличный вариант - использовать Универсальную библиотеку C . Это библиотека C, смоделированная (свободно) на C ++ STL. Он предоставляет структуру очереди, списки и т. Д.

5
ответ дан 7 December 2019 в 01:25
поделиться

Его нет в стандартной библиотеке C; прослеживая связанные сообщения, похоже, что структура данных Queue должна была быть написана студентом.

В отличие от C ++, стандартная библиотека C не предоставляет стандартный набор контейнеров.

1
ответ дан 7 December 2019 в 01:25
поделиться

Во-первых, вам нужно C ++, а не C. C не является объектно-ориентированным языком, и в нем нет стандартных библиотек для таких вещей, как очереди.

Для C ++ ищите std :: queue.

#include <queue>

int main(int argc, const char *argv[])
{
     std::queue q;
     /// etc;
}

Вы можете , конечно, создадите структуру, подобную очереди, в C, но вам придется делать большую часть работы самостоятельно. См. Ответ ниже о макросах TAILQ_.

-8
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: