Многофункциональная реализация связанного списка в чистом C

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

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

Я сосредотачиваюсь на списках в этой теме, потому что, как правило, это структура, которую я часто использую в программе, либо как «основную» структуру, либо как «вспомогательную» структуру для других более крупных (например, хеш-дерево, которое разрешает конфликты с использованием связанного списка).

Это требует, чтобы в списке хранились элементы множества разных типов. Здесь я предполагаю, что не хочу перекодировать список для каждого типа. Итак, я могу придумать эти альтернативы:

Составление списка пустых указателей (вроде не элегантно; сложнее в отладке)Составление только одного списка, но ссоюз как «тип элемента», содержащий все типы элементов, которые я буду использовать в программе (проще для отладки; тратит пространство, если элементы не одного размера)Использование макроса препроцессора для регенерации кода для каждого типа в стилеSGLIB, «имитируя» STL (творческое решение C ++); не тратит пространство; элементы имеют явный тип, которым они на самом деле являются, когда возвращаются;любое изменение в списке кода может быть очень драматичным)Ваша идея / решение

Чтобы прояснить вопрос: что из вышеперечисленного лучше?

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

Ответы на вопрос(9)

Ваш ответ на вопрос