2014 dxdy logo

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

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




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


24/05/09

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

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

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

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

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение19.03.2012, 10:32 
Заслуженный участник


09/09/10
3729
Итератор — это бегунок по структуре данных. Минимально он поддерживает четыре операции:
1) стать на начало структуры,
2) сдвинуться вперед на один элемент,
3) проверить, не кончилась ли структура,
4) выдать значение текущего элемента.

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

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


30/01/06
72407

(Оффтоп)

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

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

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

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

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


24/05/09

2054
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 
Заслуженный участник


09/09/10
3729

(Оффтоп)

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


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

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

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


30/01/06
72407

(Оффтоп)

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

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


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

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

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


09/09/10
3729

(Оффтоп)

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 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

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

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


(Оффтоп)

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

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

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


07/07/10
100
Нижний Новгород
Могу посоветовать очень быструю структуру данных(double linked list):

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

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

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


30/01/06
72407
Unmanner в сообщении #555452 писал(а):
Могу посоветовать очень быструю структуру данных(double linked list)

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group