| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Однонарпавленный список |
| Автор: madbizarre 14.12.2010, 21:01 | ||
В однонаправленном списке пытаюсь удалить каждый 3 элемент.
После ввода значений, выдает ошибку... Подскажите что я не правильно делаю! |
| Автор: Dov 14.12.2010, 23:48 |
| Счас придёт Чоо и всё тебе подробненько расскажет... |
| Автор: Чoо 15.12.2010, 00:45 | ||||||||||||
а Чоо в последнее время разленился и ни чо не расскажет
Читаю: если указатель на следующий элемент равен нулю, то указатель на следующий элемент равен указателю, на следующий элемент после следующего (который равен нулю), а такого быть не может. ну а дальше не смотрел, так как подозреваю, что там такое же.. Вообще инструкций такого вида советую избегать:
если и получится что-нибудь сваять, то прежде чем получится, замучаетесь с отладкой. а хотя... гляну чо там дальше... значит, если указатель после curr если не равен NULL выполняем следующее:
следующий элемент за curr равен следующему после следующего временный элемент равен тому же следующему после следующего (соответственно получаем утечку, так как потеряли указатель на первоначальный curr->next) потом забываем о наших всех манипуляциях и убиваем элемент curr. А потом, в довершение всего, делаем новую утечку, меняя указатель curr, который еще указывает на некую область памяти, на элемент, который изначально следовал за следующим после следующего. Честно говоря, не хочется думать, как в маин происходит вычисление каждого третьего элемента. небольшое замечание по ипользованию постфикса в p++. Хоть в данном случае ошибок нет и не может быть, лучше привыкать к префиксному варианту: поможет избежать в будущем неявных ошибок. Дело в том, что ++p возвращает новое значение, хранящееся в p, а p++ возвращает значение, которое было до инкремента (хотя в обоих случаях p инкрементируется). Добавлено @ 00:49
вот тут.. тут достаточно хранить один указатель на голову списка. Текущий элемент можно передавать в функцию. Добавлено @ 00:55
может все-таки:
? вопщем. посоветую разбить решение задачи на 3 подзадачи: 1. Составление списка 2. Вывод списка. 3. Удаление элемента из списка. Когда список будет нормально составляться, то можно приступать к функции его вывода. Как только функция готова, приступаем к удалению (для наглядности после каждого удаления можно выводить список на экран). |
| Автор: Чoо 15.12.2010, 01:41 | ||
примерно вот так будет выглядить вся задача:
|
| Автор: madbizarre 15.12.2010, 18:35 |
| Спасибо очень помог... Можешь еще подсказать вот такую задачу... Реализовать в виде программы заданный набор операций (поиск, объядинение, разность, пересечение) с использованием управляющей структуры данных - двоичного дерево (дерева двоичного поиска). Прочитал много по двочному дереву, но нигде не нашел примера объядинения разности и пересечения, можешь по пунктам расказать что от меня требуется, если не сложно лёгкие примеры алгоритмов |
| Автор: Dov 15.12.2010, 23:26 |
А что, нормалёк, по-моему. Получай по репе... |
| Автор: Dov 15.12.2010, 23:47 |
| Хотя мне больше импонирует http://codepad.org/tnM5iINz |
| Автор: Чoо 15.12.2010, 23:50 |
| ну да, удаление каждого третего логичней всего было отправить в функцию ну и с указателями на указатели я пока еще путаюсь, потому пока что предпочитаю без них обходиться |
| Автор: madbizarre 16.12.2010, 09:13 |
| Так что по поводу дерева? |
| Автор: Чoо 16.12.2010, 13:09 | ||||
| дерево делать не буду. там немного больше теории и больше кода. вопщем элементом бинарного дерева будет:
тоесть каждый элемент имеет связь с предшествующим ему узлом и двумя дочерними. при построении должно соблюдаться следующее правило:
если его строить, руководствуясь этим правилом, получим бинарное дерево поиска, иначе - просто бинарное дерево. |
| Автор: madbizarre 16.12.2010, 16:03 |
| Да это то понятно я литературу читал. Меня интересует пересечение, разность, обьядинение. Как реализовать? Это множества? Или в деревьях как то иначе |
| Автор: Чoо 16.12.2010, 16:42 | ||
не знаю |