0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
||||||
1 | ||||||
двунаправленный список.29.05.2011, 22:49. Показов 2845. Ответов 26
Метки нет (Все метки)
Доброго времени суток.
Прощу помочь с заданием которое звучит так : Построить кольцевой двунаправлений список. Значения элементов считать из файла. Определить, есть ли в списке хотяб один элемент, который равен элементу , что идет за ним по кругу. Вывести такие элементы. Удалить из списка все элементы у которых одинаковые "соседы"(первый и последний считать соседами). Смог реализовать сам список и загрузку из файла, но вот как сравнивать текущий и предидущим не понимаю. Буду рад любой помощи.
0
|
29.05.2011, 22:49 | |
Ответы с готовыми решениями:
26
Двунаправленный список двунаправленный список двунаправленный список Двунаправленный список |
9 / 9 / 3
Регистрация: 03.11.2009
Сообщений: 39
|
||||||
29.05.2011, 23:02 | 2 | |||||
1
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
29.05.2011, 23:47 [ТС] | 3 |
К несчастью, после вызова функции ничего не происходит.
Очень похоже на запуск "бесконечного цикла".
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
29.05.2011, 23:52 | 4 | |||||
Кто-то забыл передвигать prev
1
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
||||||
30.05.2011, 00:08 [ТС] | 5 | |||||
Добавил выведение на экран и работает замечательно.
Только один маленький нюанс - программа всегда выводит последний элемент не зависимо от того равен ли предидущий ему. Подскажет кто, как исправить это? И как возможно удалить эти элементы из списка после выведения их на экран ?
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
30.05.2011, 00:26 | 6 |
Хм. А первый последнему случайно не равен? С ходу ошибка в логике не обнаруживается что-то.
Кстати, функция show, если я правильно понимаю без запуска программы, не выводит последний элемент. А если элемент всего один, то вообще ничего не выводит.
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 00:33 [ТС] | 7 |
Нет.
Делал одинаковыми - результат тоже был не корректный. Вот данные в файле: tete wwww eeee rrrr hhhh hhhh 5555 5555 ttert qweqzs hfghfd После вызова функции получаем : hhhh 5555 hfghfd Если сделать первый и последний одинаковый, при этом оставив всё остальное так-же получим такой-же результат, т.е.: hhhh 5555 hfghfd Но ведь сначало мы первый элемент сравниваем с последним и результат hfghfd должен стоять на первом месте, а потом уже hhhh и 5555. Выходит, что первый элемент вообще не проверяеться, а посдений всегда выводиться. Если Вы о том, что без считывания из файла функция show крашит екзешник - это не страшно. А вот с одним элементом работает отлично - выводит его.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
30.05.2011, 00:43 | 8 | |||||
Это я не запуская программу пытаюсь понять работает функция или нет
Если с одним элементом работает отлично, то я пока не понимаю как.
В этом случае цикл не должен выполниться ни разу, а элементы выводятся в цикле. Ладно, придётся, наверное, всё-таки запустить программу
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 00:50 [ТС] | 9 |
Надеюсь на вашу помощь.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
30.05.2011, 00:55 | 10 | |||||
Запустил.
Если в начало функции add добавить строку
Когда после считывания последней строки fscanf наталкивается на конец строки, он возвращает последнюю считанную строку, которая повторно заталкивается в список. Но из-за ошибки в show этого не видно Зато функция поиска повторов это видит.
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 01:15 [ТС] | 11 |
Что-то я совсем не понимаю как это исправить
И с удалением элемента пока ничего не выходит(
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
30.05.2011, 01:21 | 12 | |||||
Исправить что? Повторное добавление?
По-быстрому, это перед add(str) вставить
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 01:27 [ТС] | 13 |
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
30.05.2011, 01:33 | 14 |
А при создании списка все элементы добавляются? Там может быть нюанс, связанный с завершением последней строки, поэтому и сказал "по-быстрому"
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 01:37 [ТС] | 15 |
Да, проверил дебагом - добавляються все.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
30.05.2011, 01:40 | 16 |
Тогда странно. У меня только одно теряется, последнее, как и ожидалось
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 01:52 [ТС] | 17 |
Действительно странно.
Без if (feof(file)) break; - теряеться последнее С if (feof(file)) break; - теряеться 2 последних
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
30.05.2011, 01:55 | 18 |
0
|
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
|
|
30.05.2011, 02:07 [ТС] | 19 |
Странно. Еще раз проверил:
Без if (feof(file)) break; - нету потерь, при этом последний элемент всегда выводиться в compare() С if (feof(file)) break; - теряеться 1 последний и при первый=последний не выводит его в compare()
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
30.05.2011, 02:17 | 20 |
Да, теперь работает так, как написано в программе. То есть надо бы исправить и show, и compare. Но я на паузу
0
|
30.05.2011, 02:17 | |
30.05.2011, 02:17 | |
Помогаю со студенческими работами здесь
20
Двунаправленный список Двунаправленный список Двунаправленный список Двунаправленный список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |