Форум программистов, компьютерный форум CyberForum.ru

Работа со списками - C++

Восстановить пароль Регистрация
 
Midelll
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 16
15.12.2012, 01:16     Работа со списками #1
Здравствуйте!

Нужно реализовать много разных функций по работе со списками. Все работает кроме одной.

Есть однонаправленный линейный список. Нужно сделать функцию замены элементов в списке.
В функцию передается 2 id, они удачно находятся, после чего нужно написать те самые несколько строчек, где поменять адреса указателей, чтобы два элемента списка поменялись. Тут то и проблема.

В общем находятся id и т.д. - все правильно, поэтому привожу только часть программы самой замены элементов:

C++
1
2
3
4
5
6
7
8
Elem* a = cur1->next;
Elem* b = cur2->next;
 
Elem* buf = cur1->next->next;
a->next=b->next;
b->next=buf;
cur1->next=b;
cur2->next=a;
тут a и b это найденные по id элементы списка. cur1 и cur2 соответственно стоящие элементы перед темы найденными.

Самое основное это последние 4 строчки. Напомню, список однонаправленный линейный.
Например представим, что у нас 5 элементов в списке. Если менять 2 и 4 - то меняется отлично, и потом 4 и 2 обратно поменять можно. А вот когда я начинаю менять соседние элементы, но тут проблема. Например поменять 3 и 4 не получается. Когда начинаю выводить список на экран, список зацикливается и выводится вот так:
1
2
4
4
4
...

Он как бы поменял 3 и 4, но какой-то адрес не поменялся, и он зацикливается на четверке.

P.S. Первый элемент пока не трогать, там для него в другом месте идет замена. Я тот кусок кода уже изменю исходя из ваших подсказок.

Огромное спасибо заранее!!!

Добавлено через 4 часа 12 минут
Никто не знает как это исправить? Просто нужно сегодня сделать обязательно...

Добавлено через 1 час 40 минут
Вот так задается список
C++
1
2
3
4
5
6
struct Elem 
{
    int id;
    char* str;
    Elem* next;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 01:16     Работа со списками
Посмотрите здесь:

Работа со списками C++
Работа со списками C++
C++ Работа со списками
Работа со списками. C++
C++ Работа со списками
C++ Работа со списками
Работа со списками C++
C++ Работа со списками

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
15.12.2012, 13:23     Работа со списками #2
Ну поменять соседние, надо примерно делать так. Берём предыдущий элемент списка который стоит раньше(который надо менять пускай будет а), Кидаем указатель на следующий элемент который надо менять (b)
ну примерно cur1->next=cur2->next;
затем первый элемент который меняем кидаем его ссылка ну за соседний элемент:
cur2->next =cur1->next;
cur1->next=cur2->next;
примерно так, словами короче трудно объяснить))
схему такая
элементы:
a,b,c,d,f;
a->b,b->c,c->d;d->f;
меняем b i c;
a->c;
b->d;
c->b;
получается
a,c,b,d,f))
Лучше так)
Midelll
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 16
15.12.2012, 21:01  [ТС]     Работа со списками #3
Wolkodav, спасибо большое!

Хотя уже и поздно) но я сам это решил, поэтому все хорошо.
Yandex
Объявления
15.12.2012, 21:01     Работа со списками
Ответ Создать тему
Опции темы

Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru