![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Может кто подскажет почему выводится только первый элемент? Сортировка по полю year. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
А чего то я не вижу чтоб в коде был вывод. Или Вы телепатические способности форумчан проверяете ? ну так бы и указали в названии сортировки, чем лишний комментарий писать из того что бросилось в глаза : а где return ? year у Вас объявлен как int, а значит отрицательные значения не отсортируются. ну и напоследок : сделайте элементарные функции необходимые для работы сортировки, например swap для обмена местами двух элементов списка и тогда не придется разбираться в куче сваленного вместе кода. конечно также было бы хорошо отсоединить список от описания структуры. т.е так :
это также уменьшит головомойку при написании кода. Это сообщение отредактировал(а) mes - 16.3.2009, 21:18 |
||||
|
|||||
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Года - все положительные.
Печать вызываю с главной функции
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а почему грeшите на сортировку ? до сортировки у Вас список нормально выводится ? Это сообщение отредактировал(а) mes - 16.3.2009, 21:19 |
|||
|
||||
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
До сортировки все нормально выводится.
Добавлено через 2 минуты и 48 секунд Сделал печать перед каждым новым вызовом рекурсии (return sort) ВОт что выводит после каждого прохождения, в консоли:
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Master_, выложите функцию read_file и сам файл с которого читаешь.
p_pred - я сначала думал, что это предикат. а это предЫдущий? ещё вопрос: функцию сортировки вы с головы придумали или это алгоритм какой-то? Это сообщение отредактировал(а) zim22 - 16.3.2009, 21:51 |
|||
|
||||
| Master_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Код
Файл прикрепляю Содержимое файла:
Это сообщение отредактировал(а) Master_ - 16.3.2009, 22:00 Присоединённый файл ( Кол-во скачиваний: 5 )
list.txt 0,24 Kb |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в новой ветви рекурсии при обмене с новонайденным не учитывается оставшийся в предыдущей ветви элемент. решается путем отделения списка от самого значения (как написано во 2м посту) и обменом самих значений, а не элементов списка. |
|||
|
||||
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Может можно как-то сделать с существующим списком? Просто переделывать остальное не хочется..
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Переделовать делов на 5-20 минут, а чтоб добиться правильной работы придется мучаться не один час, находя все новые и новые баги Так что если своего времени не жалко, не переделывайте - лично я в таком случае пас. Это сообщение отредактировал(а) mes - 16.3.2009, 23:00 |
|||
|
||||
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Можно тогда приимерчик с использованием StructNode?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
примерно так :
т.е как можно видеть по коду, список не меняет очередности элементов, а лишь происходит обмен значений (в нашем случае указателей на структуру Student) P.S. компилить и тестировать не пробовал..но предполагаю что код рабочий. Это сообщение отредактировал(а) mes - 17.3.2009, 00:39 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Нельзя ли поподробней ? Kак будет влиять кол-во полей структуры Student на обмен значений двух указателей ?! Насчет двусвязанногo списка : выгода при применение будет от алгоритма обхода списка , a не от возможности менять элементы Это сообщение отредактировал(а) mes - 17.3.2009, 00:45 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Может я недопонял алогритм - мне показалось надо поменять местами структуры: т.е. нашли искомую с наименьшим (наибольшим) годом и поставили ее на текущее место, а текущую на место той, которую нашли - затем следующая итерация. В виду того, что мы не знаем предка текущей - мы вместо этого меняем год, оставляя остальные поля без изменений. Получится, что года отсортировали, а фамилии оставили... Либо я просто неврубился - тогда извините. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а тут есть пример базовых функций по работе со списком :
http://forum.vingrad.ru/index.php?showtopi...t&p=1812858 см. AdjList... Добавлено через 1 минуту и 32 секунды
меняем значения указателей ..node->value. Добавлено через 2 минуты и 54 секунды Такого решения я бы не посмел предложить |
|||
|
||||
| Master_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Я тоже вначале подумал что меняет одно значение
Вроде понятно, но вот с head (первым) как быть, в той же функции read_file не могу додумать как изменить код.. Добавлено через 4 минуты и 37 секунд Попробовал так, но ругается на fin'ы
Добавлено через 7 минут и 41 секунду Вот так скомпилил, но не знаю, правильно ли пойдет:
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
опять расчет на телепатов ? может поделитесь тем, что пишет Вам компилятор ? думаю или #include забыли или std:: может прежде чем загружать из файла напишите функции для удобной работы со списком ? хотя бы такие как добавить элемент и удалить его. и ссылку Вам для примера дал же увы :( |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Виноват, не посмотрел. |
|||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
вообще непонятно в чём смысл тут 1 p = g->next; предположим g == headptr, тогда p = headptr->next; 2 g->next = p->next; это то же самое headptr->next = headptr->next->next; 3 p->next = headptr; это уже headptr->next->next = headptr; 4 headptr = p; это headptr = headptr->next; в строках 2 и 3 наблюдается смешивание |
|||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
сейчас обратил что я лишнюю сущность ввел (min_year), вот без нее :
Добавлено через 11 минут и 45 секунд а еще лучше будет выделить функцию сравнения, тогда код будет следующим
А вот пример использования для сортировки по годам :
Это сообщение отредактировал(а) mes - 17.3.2009, 13:06 |
||||||||
|
|||||||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 2 Всего: 22 |
лучше для быстродействия или для читаемости? обычно это две взаимоисключающиеся вещи. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
удобнее для использования и в общем случае безопаснее. Достаточно одной функции сортировки "на все случаи жизни" и предикат под каждый конткретный случай. По сравнению с остальными затратами этого алгоритма, лишний вызов функции заметен на скорости не будет |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |