Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 16:26   #1
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию Обмен местами 2х элементов в односвязном списке.

Необходимо придумать алгоритм обмена местами 2х элементов в односвязном списке (вариант обмена местами инфы в элементах не предлагать))).
Я думал что-то типа такого написать:
int ex(apt **p1, apt **pr1, apt **p2, apt **pr2)
{
apt *temp; apt *tempr;
temp->next=(*p1)->next;
(*p1)->next=(*p2)->next;
(*p2)->next=temp->next;
tempr->next=(*pr1)->next;
(*pr1)->next=(*pr2)->next;
(*pr2)->next=tempr->next;
return 0;
}
Получется только для элементов не расположенных рядом.

Возможно я придумал бы сам алгоритм, но уже 4 дня программирую, голова не соображает, помогите.

И ещё: если один из элементов первый, то когда надо-будет поменять указатель на первый элемент?
amdbodia вне форума Ответить с цитированием
Старый 19.05.2009, 16:44   #2
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Забыл пояснить:
p1 и p2 - меняемые эл-ты, а
pr1 и pr2 - предшествующие им.

Можно сделать так:

Код:
void ChangePos(apt *a1, apt *a2)
{
 apt *a1next = a1->next->next;
 apt *a2next = a2->next->next;
 a1->next = a2->next;
 a2->next = a1->next;
 a1->next->next = a2next ;
 a2->next->next = a1next;
}
и передать только предшествующие.

Но то в таком случае делать с указателем на начало писка? Блин, я совсем туплю (((

Ещё вопрос: надо-ли использовать при пердаче параметров конструкцию вида (apt **p1), или достаточно (apt *p1)?
amdbodia вне форума Ответить с цитированием
Старый 19.05.2009, 22:54   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Блин, да помогите кто-то, я уже умираю над этим ноутом грёбанным
amdbodia вне форума Ответить с цитированием
Старый 19.05.2009, 22:55   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

тебе соритровка списка нужна или просто поменять два элемента местами?

если сортировка то приблизительно так

надо рассмотреть два случая

1. меняемые элементы стоят рядом, т.е. pr2=pr->next
если pr1=начало списка, то начало = pr2
2. остальные случаи
если pr1=начало списка, то начало = pr2

и в каждом случае проверять, является ли элемент головным в списке

если поменять местами, то используй четыре элемента : которые меняеш и предшествующие им + указатель на начало списка, ну и смотри пункты 1 и 2

Цитата:
Ещё вопрос: надо-ли использовать при пердаче параметров конструкцию вида (apt **p1), или достаточно (apt *p1)?
хватит одной звездочки

PS. ну и намудрил же я... Но когдато также мучался
counter вне форума Ответить с цитированием
Старый 31.05.2009, 23:26   #5
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Сначала я написал код, потом переделал.
Если кто-то будет пользоваться поиском и найдёт эту тему, то конкретно я ему сообщу такую простую мысль, что в любом односвязном списке нах не надо менять местами указатели. Гораздо проще создать ещё одну структуру, не связанную с собой полем "некст" и на которую будет указывать указатель из односвязного списка, содержащего всего 2 поля: указатель на "некст" и указатель на структуру с инфо. Кому надо конкретнее - пишите.
amdbodia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. bessonov12 Microsoft Office Excel 7 04.05.2009 05:44
Дан массив из N элементов (чисел),определить количество элементов кратных 3. Woha Общие вопросы C/C++ 2 08.12.2008 13:12
поиск IP в списке TaTT DoGG PHP 6 13.08.2008 18:53
Обмен местами) Sota Общие вопросы C/C++ 7 22.02.2008 18:32
количество элементов матрицы, больших среднего арифмитического всех её элементов finch Помощь студентам 3 27.08.2007 15:48