Печать хеш-таблицы в элементе заказа были вставлены - PullRequest
1 голос
/ 07 мая 2019

Итак, у меня есть эта хеш-таблица, которая работает нормально, но мне нужен способ напечатать ее элементы в том порядке, в котором они были вставлены. Я думал о том, как это сделать, но единственный способ, которым я действительно должен был сделать, - это создать список вне хеш-таблицы с элементами и распечатать список, но я пытаюсь избежать этого, потому что это победит весь Цель создания хеш-таблицы. Каждый элемент хеш-таблицы имеет значение NULL (которое я не хочу печатать) или связанный список. Спасибо!

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

Редактировать: Я также должен удалить узлы внутри связанных списков в элементах массива, так что это может усложнить отслеживание порядка.

1 Ответ

0 голосов
/ 07 мая 2019

Хеш-таблицы не отслеживают порядок вставленных вами вещей.

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

Примерно так (хотя, очевидно, это зависит от вашей точной реализации):

struct HT {
    size_t count, capacity;
    void **elements;         // just an example of a possible implementation.
    LL **order;           // keep track of insertion order here.
}

order в этом случае следует хранить указатель на элемент в одном из связанных списков.Итерация по этому массиву даст вам элементы в том порядке, в котором они были вставлены.Просто убедитесь, что вы обновляете order всякий раз, когда добавляете или удаляете элемент.

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