LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Суть в том, что

я решил убить пару часов времени и написать тот злосчастный двусвязный список на C

двусвязный список сам по себе - вещь бесполезная, не надо его писать просто так. Полезная вещь - интеграция двусвязного списка в какое-то описание объекта. Вот есть у тебя структура с описанием, например, файла в директории:

struct filedesc {
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};

А теперь ты хочешь сделать список файлов. В каком-нить скриптовом языке это делалось бы обёртыванием готовой реализации описания файла в реализацию списка. Тут - нет. Добавляем два поля в имеющуюся структуру:

struct filedesc {
  struct filedesc *next, *prev;
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};

struct filelist {
  struct filedesc *first, *last;
};

Реализуем ещё около 20 строк кода: функция добавления файла в список, удаления файла из списка, поиска файла по имени в списке. Всё, теперь у нас есть двусвязный список описаний файлов. Разумеется, не за 2 часа, а за 10 минут.

Исправление firkax, :

Суть в том, что

я решил убить пару часов времени и написать тот злосчастный двусвязный список на C

двусвязный список сам по себе - вещь бесполезная, не надо его писать просто так. Полезная вещь - интеграция двусвязного списка в какое-то описание объекта. Вот есть у тебя структура с описанием, например, файла в директории:

struct filedesc {
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};```

А теперь ты хочешь сделать список файлов. В каком-нить скриптовом языке это делалось бы обёртыванием готовой реализации описания файла в реализацию списка. Тут - нет. Добавляем два поля в имеющуюся структуру:

struct filedesc { struct filedesc *next, *prev; char const * name; uchar type; off_t size; ushort mode; uint owner, group; };

struct filelist { struct filedesc *first, *last; };


Реализуем ещё около 20 строк кода: функция добавления файла в список, удаления файла из списка, поиска файла по имени в списке. Всё, теперь у нас есть двусвязный список описаний файлов. Разумеется, не за 2 часа, а за 10 минут.

Исходная версия firkax, :

Суть в том, что

я решил убить пару часов времени и написать тот злосчастный двусвязный список на C

двусвязный список сам по себе - вещь бесполезная, не надо его писать просто так. Полезная вещь - интеграция двусвязного списка в какое-то описание объекта. Вот есть у тебя структура с описанием, например, файла в директории:

  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};```

А теперь ты хочешь сделать список файлов. В каком-нить скриптовом языке это делалось бы обёртыванием готовой реализации описания файла в реализацию списка. Тут - нет. Добавляем два поля в имеющуюся структуру:
```struct filedesc {
  struct filedesc *next, *prev;
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};

struct filelist {
  struct filedesc *first, *last;
};

Реализуем ещё около 20 строк кода: функция добавления файла в список, удаления файла из списка, поиска файла по имени в списке. Всё, теперь у нас есть двусвязный список описаний файлов. Разумеется, не за 2 часа, а за 10 минут.