Как написать функцию переменного тока, которая создает пустую очередь? - PullRequest
2 голосов
/ 28 сентября 2011

Я новичок в C. Я понятия не имею, как написать функцию C, которая создает пустую очередь и возвращает пустой указатель.

void* queue_open(void)

Я также хочу знать, как написать функцию C, которая помещает элемент в конец очереди.

void queue_put(void *p, void *elementp)

Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Если вы исходите из объектно-ориентированного фона (как показывают сигнатуры вашего метода).

Объектно-ориентированная идея -> хороший способ сделать это в C

Создание объекта -> malloc структура, а затем передать ее в функцию инициализации

struct queue* q = (struct queue*)malloc(sizeof(struct queue));
queue_initialize(q);

если хотите, можете обернуть это в функцию, например так:

struct queue* queue_construct() {
  struct queue* q = (struct queue*)malloc(sizeof(struct queue));
  queue_initialize(q);
  return q;
}

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

Реализуйте метод -> создайте функцию, которая получает указатель структуры на структуру "почти эта".

struct user* user = ... whatever we do here ...;
queue_add(q, (void*)user);

Что касается того, как на самом деле реализовать очередь, я предлагаю хорошую книгу о структурах данных или алгоритмах, поскольку есть много способов сделать это; и конкретные методы, которые вы выберете, будут по-разному влиять на производительность и надежность. Нет лучшего способа, он сильно зависит от того, как будет использоваться очередь, и какие аспекты производительности более важны.

Книга, которую я рекомендую: Введение в алгоритмы . Эта книга излишня для большинства ситуаций, с очень подробными списками почти всех основных структур данных, с которыми вы, вероятно, столкнетесь в первые несколько лет программирования. Как таковой, он делает отличную ссылку, несмотря на его попытку нейтрального подхода, который теперь выглядит странно по сравнению с обычными языками программирования.

Как только вы поймете, что происходит, вы можете сделать это практически на любом языке.

1 голос
/ 28 сентября 2011

Вам необходимо решить, как должен выглядеть элемент очереди, что такое очередь и что означает, что очередь пуста.Если вы знаете эти вещи, написание queue_open и queue_put должно быть довольно простым.Я бы посоветовал вам начать с определения структуры, которая представляет ваш элемент очереди.

0 голосов
/ 29 сентября 2011

Вы можете узнать об очередях здесь:

http://en.wikipedia.org/wiki/Queue_(data_structure)

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

После концептуального понимания очереди я рекомендую попытаться реализовать ее самостоятельно, а затем использовать пример кода по ссылке выше в качестве справки, когда вы застряли.

Лучшее, что вы можете сделатьэто пара с другим учеником в вашем классе, который умнее вас.Затем создайте пару программ (http://en.wikipedia.org/wiki/Pair_programming) с ним для решения проблемы.Вы станете лучшим программистом.

...