Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 23
1

Swap для двунаправленного списка

19.03.2014, 11:41. Показов 2135. Ответов 2
Метки нет (Все метки)

Поменять просто значения узлов, не интересно. Я запутываюсь с ссылками. элементы могут быть заглавными или последними.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct node
{
    int k;
    node *next;
    node *pred;
};
 
typedef node* pnode;
...
 
void swap(pnode &a, pnode &b)
{
  ....
}

собственно нужна помощь, подскажите алгоритм.
(а вообще этот swap нужен для реализации сортировки вставками =) )
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2014, 11:41
Ответы с готовыми решениями:

QuickSort двунаправленного списка для полей типа string
Привет! В списке есть несколько полей. Реализовал QuickSort для поля типа int, сейчас стоит задача...

Написать swap для двусвязного списка
Здраствуйте, имеються такие структуры: struct Node { uint count; string data; Node* next;...

Оптимизация кода функции swap для двусвязного списка
Написал функцию для обмена двух любых элементов двусвязного списка, рассмотрел все случаи, но мне...

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct Double_List {//структура...

2
26 / 26 / 15
Регистрация: 03.05.2013
Сообщений: 71
19.03.2014, 12:42 2
попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void swap(pnode &a, pnode &b)
{
     pnode tmp_b = b->next;
     pnode tmp_a = a->next;
     b->next = a->next;
     a->next = tmp_b;
     if(tmp_b)
          tmp_b->pred = a;
     if(tmp_a)
          tmp_a->pred = b;
     tmp_b = b->pred;
     tmp_a = a->pred;
     b->pred = a->pred;
     a->pred = tmp_b;
     if(tmp_b)
          tmp_b->next = a;
     if(tmp_a)
          tmp_a->next = b;
}
длинно и может не очень красиво, но это первое, что пришло в голову. я не проверял рабочесть кода, но думаю это или что-то близкое к нему должно помочь вам.(если уж так сильно хочется менять ссылки). а вообще программист должен быть ленивым и реализовывать тот метод, который быстрее и проще.
1
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 23
20.03.2014, 11:14  [ТС] 3
Тут та же ошибка, что у меня, теряется кусок списка лежащий между элементами, которые нужно поменять местами;
Появилась идея сделать обмен таким образом:
1) протолкнуть первый элемент A по списку вперед (до элемента B с которым его надо менять) меняя местами с соседним элементом.
2) поменять два соседних элемента A и B (это как раз те заданные)
3) вернуть B на место A;

Но что-то это тоже не получается реализовать.

Кто, что может предложить?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2014, 11:14

Очередь из двунаправленного списка
Вот мой двусвязный список : struct Num { int number; bool ring; Num *next, *prev; };...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема, у меня еще просто...

Шаблон двунаправленного списка
Добрый день! Пишу программу "библиотека", которая включает в себя типы данных Книга и Читатель...

Сортировка двунаправленного списка
Помогите отсортировать составленный список по определенному полю, я пробовал методом пузырька, но...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru