2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение19.03.2012, 08:44 
Joker_vD в сообщении #549877 писал(а):
Особенно замечательно, что при сортировке не "ящики" переставляются, а их "содержимое" перекладывается. А итератора как не было, так и нет. Тихий ужас, в общем.

Да? И правда, не заметил... эту функцию я написал, но в программе она оказалась невостребованной, так и осталась в исходнике закомментированной, оттуда я её и вытащил. Если бы использовалась в проге - возможно давно довёл бы до ума.
Плюс сыграла роль привычка к работе с массивами, перекладка содержимого скорее всего "оттуда".

В общем, соглашусь, пример я привёл неудачный и не из той оперы.

Тогда что такое итератор практически? Это класс, который умеет "работать" со структурами (данными)? То есть он должен у себя внутри хранить адреса начала данных, конца, текущего положения? Кроме того он должен уметь добавлять и удалять данные, чтобы самому корректно менять адреса?

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение19.03.2012, 10:32 
Итератор — это бегунок по структуре данных. Минимально он поддерживает четыре операции:
1) стать на начало структуры,
2) сдвинуться вперед на один элемент,
3) проверить, не кончилась ли структура,
4) выдать значение текущего элемента.

Действительно, для двусвязного списка в вашем исполнении итератором может служить указатель:
NDSet *iter;
1) iter = pListBeg;
2) iter = iter->pNext;
3) (iter == NULL)
4) *iter

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение19.03.2012, 19:56 
Аватара пользователя

(Оффтоп)

Joker_vD в сообщении #549877 писал(а):
Особенно замечательно, что при сортировке не "ящики" переставляются, а их "содержимое" перекладывается. А итератора как не было, так и нет. Тихий ужас, в общем.

Для меня более неприятными были те моменты, что структуры данных не сделано как отдельной структуры (вместо неё две глобальных переменных), и что семантика функции не соответствует названию и комментарию, и сама по себе - bad design. Да, и итератора как не было, так и нет.

Alexu007 в сообщении #549900 писал(а):
эту функцию я написал, но в программе она оказалась невостребованной

Ну это вообще LOL. Зачем вы тогда её привели?

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение20.03.2012, 06:23 
Munin в сообщении #550081 писал(а):
Для меня более неприятными были те моменты, что структуры данных не сделано как отдельной структуры (вместо неё две глобальных переменных), и что семантика функции не соответствует названию и комментарию, и сама по себе - bad design. Да, и итератора как не было, так и нет.


Используется синтаксис C++
class NDSet
  {
  public:
   NDSet* pPrev;
   NDSet* pNext;

   AnsiString Dig;
  //сюда можно поместить
  //любые данные
  };

Это структура, хранящая данные - строковую переменную Dig (других данных в моём случае не потребовалось, но туда можно поместить что угодно). pPrev и pNext - указатели на предыдущий и следующий элементы списка.
Глобальные pListBeg и pListEnd - указатели на начало и конец списка. Позволяют "гулять" от начала к концу списка и обратно. Другого не требовалось. При необходимости можно добавить указатель на текущую позицию в списке.


Цитата:
Ну это вообще LOL. Зачем вы тогда её привели?

Она выполняла свою работу, то есть сортировала данные в списке. Просто эта сортировка не понадобилась.

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение20.03.2012, 10:45 

(Оффтоп)

Munin
Не, ну как по мне — бог с ним, что структура существует в единственном глобальном экземпляре. Это за пять минут переправляется в человеческий вид. Но кто ж полезет внутрь sort, разбираться, как там идет сортировка? Проглядишь обязательно тот тонкий момент как пить дать.


Alexu007
У меня создается впечатление, что вы остались где-то в начале 80-ых. Или даже чуть раньше. Ввели NDSet — введите уж и NDList. А вообще для С++ давно написана STL. Синтаксис, конечно, у ей уродский, но работает шустро.

Вы ведь даже не поняли комментария Munin. Он имел в виду под "структурой" весь список в целом — указатели на голову и хвост, все входящие в него экземпляры NDSet и процедуры работы с ним. У вас эта структура размазана ровным слоем по коду.

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение20.03.2012, 18:13 
Аватара пользователя

(Оффтоп)

Joker_vD в сообщении #550277 писал(а):
Но кто ж полезет внутрь sort, разбираться, как там идет сортировка? Проглядишь обязательно тот тонкий момент как пить дать.

А главное, куда более толстый момент: что никакая это не сортировка вообще.


Joker_vD в сообщении #550277 писал(а):
А вообще для С++ давно написана STL. Синтаксис, конечно, у ей уродский, но работает шустро.

К синтаксису у меня претензий нет (может быть, потому что свыкся), а вот design у неё правильный, образцовый. Действительно, на ней бы и поучиться. Конкретно условиям задания удовлетворяет std::set .

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение20.03.2012, 19:44 

(Оффтоп)

Munin
Вротмненоги, действительно, еще одного цикла не хватает :shock:

Munin в сообщении #550394 писал(а):
К синтаксису у меня претензий нет (может быть, потому что свыкся), а вот design у неё правильный, образцовый.

Ну, лично меня глядеть на for(std::vector<int>::iterator i = v.begin(); i != v.end(); ++i) несколько утомляет, а вариант std::for_each(v.begin(), v.end(), f) используют не все. А уж читать ее исходники... столько подчеркиваний и угловых скобок в одном месте мой мозг не выдерживает. Но дизайн у нее действительно хороший, тут не поспоришь.

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение20.03.2012, 20:53 
Аватара пользователя

(Оффтоп)

Joker_vD в сообщении #550440 писал(а):
Вротмненоги, действительно, еще одного цикла не хватает

А я говорил! На самом деле, эта функция - часть семантики добавления элемента в до этого уже отсортированный список, но выделять эту часть, да ещё и называть и комментировать некорректно - ужасный bad design.


(Оффтоп)

Joker_vD в сообщении #550440 писал(а):
А уж читать ее исходники...

Хинт: исходники есть разные. И есть даже "ненастоящие", типа "эквивалентного поведения", например, как здесь: http://www.cplusplus.com/reference/algorithm/remove_if/ . Правда, это зависит от того, зачем вы читаете её исходники, в вашем конкретном случае это может быть бесполезно.

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение03.04.2012, 16:51 
Аватара пользователя
Могу посоветовать очень быструю структуру данных(double linked list):

http://gcc.gnu.org/bugzilla/attachment.cgi?id=14182

Если нужна помощь - пиши bushevuv@gmail.com

 
 
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение03.04.2012, 18:42 
Аватара пользователя
Unmanner в сообщении #555452 писал(а):
Могу посоветовать очень быструю структуру данных(double linked list)

Чего же в ней быстрого? Поиск линеен (для упорядоченного набора это даёт большое время добавления элемента в контейнер). Обычно используются деревья. Даже несбалансированное дерево имеет уже логарифмическую оценку в среднем, а частично сбалансировав его, можно её уже гарантировать.

 
 
 [ Сообщений: 25 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group