Как написать односвязный список с произвольным типом элементов?

В этой статье описывается реализация односвязного списка на C. Всё бы хорошо, но эта реализация работает только с целыми числами, а мне нужно, чтобы работала с чем угодно. Я не имею ввиду списки, в которых одновременно значения разных типов (вроде [1, "Hello, world!", 0.5]), мне нужно, чтобы я мог выбрать произвольный тип и заполнить весь список значениями этого типа (например, [1, 2, 3], ["Bob", "John", "Sarah"]). Можно ли так сделать на C?
  • Вопрос задан
  • 367 просмотров
Решения вопроса 2
@Eddy_Em
Да запросто. Элементом списка будет какая-нибудь
typedef struct{
 union{
  uint64_t u64;
  double d;
  ... 
  void *ptr;
 }data;
 d_type type;
}list_type;

В зависимости от типа type будет обрабатываться поле data. Можно туда что угодно напихать.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
[1, "Hello, world!", 0.5]

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

например, [1, 2, 3], ["Bob", "John", "Sarah"]).

А вот это уже совсем другая история, про метапрограммирование

stackoverflow.com/questions/10950828/simulation-of...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vusalg
@vusalg
Студент программист, второй курс
/* ваш собственный тип */
struct temp
{
    int age;
    char name[100];
   //и т.д.
}


struct node 
{
   temp         data;
   struct node* next;
};
Ответ написан
Комментировать
lSDriim
@lSDriim
Embedded программист
Вообще эта задача очень хорошо реализована в ядре Linux(которое как известно написано на С). Очень удачное решение, советую скопировать оттуда. Подробней можно почитать здесь isis.poly.edu/kulesh/stuff/src/klist
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы