7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
||||||
1 | ||||||
Удаление элемента из середины списка27.10.2013, 21:20. Показов 7928. Ответов 12
Метки нет (Все метки)
Приветствую. При написании программы возникла такая проблема. Не могу нормально удалить элемент, который находится в середине списка. У меня почему-то удаляет именно не текущий элемент, а следующий.
1 2 3 4 5 6 7 8 9 10 2 1: 1 2 4 5 6 7 8 9 10 2: 1 2 5 6 7 8 9 10 3: 1 2 6 7 8 9 10 Помогите, в чем проблема ? Подозреваю что проблема в указателях в подпрограмме DelElem, пытался по-разному её менять, но ни к чему хорошему это не привело. Спасибо.
0
|
27.10.2013, 21:20 | |
Ответы с готовыми решениями:
12
Удаление элемента из середины массива(статического) Реализация списка.Удаление хвостового элемента.Поиск элемента Удаление элемента списка и всего списка Удаление элемента из списка и поиск элемента |
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|
27.10.2013, 21:26 [ТС] | 3 |
Убирал я этот next оттуда. Запускаю программу, а оно мне без остановки печатает цифры в консоли.
0
|
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|
27.10.2013, 21:27 [ТС] | 5 |
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
|
27.10.2013, 21:58 | 6 |
так почитайте соответствующую Литература C++
но указатель на next в x вы сохраняли не просто так... тут нужно подумать часть ошибок исправили, дальше пусть другие вам помогают, код некрасиво написан, мне не очень хочется его читать.
0
|
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|||||||||||
27.10.2013, 22:01 [ТС] | 7 | ||||||||||
Указатель current показывает на i-1 элемент. Нам нужно удалить i-й элемент. Для этого ему нужен указатель х.
Дальше мы выполняем присваивание чтобы наш i-1 элемент указывал не на i-й, а на i+1 элемент.
Я понял в чем моя ошибка, в функцию я отправляю указатель на i-й элемент, поэтому удаляется i+1. Как мне сделать чтобы я смог отправлять указатель на i-1 элемент ?
0
|
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|
27.10.2013, 22:03 [ТС] | 8 |
А не могли бы вы скинуть немного примеров с красивым кодом, если не сложно ? Я знаю что у меня с оформлением проблемы, его сложно читать другим людям и я работаю над решением этой проблемы.
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
|
27.10.2013, 23:12 | 9 |
Нормальный код это код с использованием STL вам для изучения списков STL сейчас не подходит(но сразу после изучения списков и других базовых тем стоит переключаться на STL). У вас есть красивые картинки на них и нужно опираться, но правда они по ходу неверные - не ясно откуда вы взяли i -1.
У вас current это i а current->next это i + 1
0
|
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|
27.10.2013, 23:16 [ТС] | 10 |
Вообще это не мой код, и картинки я оттуда срисовал. Это наша... методичка с заданиями. Там так было написано. Короче говоря, функция удаляет не поточный элемент на следующий. Завтра буду разбираться.
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
|
27.10.2013, 23:37 | 11 |
надо код исправлять, чтоб соответствовал картинкам. смысл такой, для удаления запоминаем указатель на следующий элемент, удаляем текущий, то что запомнили делаем следующим у предыщего элемента.
вот ещё что -> уже подразумевает что не нужно ставить "*" поэтому достаточно писать current->next
0
|
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 114
|
|
27.10.2013, 23:40 [ТС] | 12 |
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
|
28.10.2013, 00:05 | 13 |
но даже если вы исправите, то функция будет называться не DelElem, а скорее deleteNext()
то есть удаляет не то, что ожидаете. отсюда мне приходит в голову, что нужно сначала найти предыдущий элемент(i-1), пройдя весь список вперёд, так как мы не можем определить его сразу по текущему элементу, а он нам нужен для удаления текущего или более рационально, перед тем как найдёте элемент, который требуется удалить сохраняйте указатель на предыдущий (i-1) элемент. помоему больше нет вариантов
0
|
28.10.2013, 00:05 | |
28.10.2013, 00:05 | |
Помогаю со студенческими работами здесь
13
Удаление элемента из списка Удаление элемента из списка Удаление элемента со списка Удаление элемента из списка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |