![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 71
|
![]()
Необходимо придумать алгоритм обмена местами 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 дня программирую, голова не соображает, помогите. И ещё: если один из элементов первый, то когда надо-будет поменять указатель на первый элемент? |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 71
|
![]()
Забыл пояснить:
p1 и p2 - меняемые эл-ты, а pr1 и pr2 - предшествующие им. Можно сделать так: Код:
Но то в таком случае делать с указателем на начало писка? Блин, я совсем туплю ((( Ещё вопрос: надо-ли использовать при пердаче параметров конструкцию вида (apt **p1), или достаточно (apt *p1)? |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 71
|
![]()
Блин, да помогите кто-то, я уже умираю над этим ноутом грёбанным
![]() |
![]() |
![]() |
![]() |
#4 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
![]()
тебе соритровка списка нужна или просто поменять два элемента местами?
если сортировка то приблизительно так надо рассмотреть два случая 1. меняемые элементы стоят рядом, т.е. pr2=pr->next если pr1=начало списка, то начало = pr2 2. остальные случаи если pr1=начало списка, то начало = pr2 и в каждом случае проверять, является ли элемент головным в списке если поменять местами, то используй четыре элемента : которые меняеш и предшествующие им + указатель на начало списка, ну и смотри пункты 1 и 2 Цитата:
PS. ну и намудрил же я... Но когдато также мучался |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 13.05.2009
Сообщений: 71
|
![]()
Сначала я написал код, потом переделал.
Если кто-то будет пользоваться поиском и найдёт эту тему, то конкретно я ему сообщу такую простую мысль, что в любом односвязном списке нах не надо менять местами указатели. Гораздо проще создать ещё одну структуру, не связанную с собой полем "некст" и на которую будет указывать указатель из односвязного списка, содержащего всего 2 поля: указатель на "некст" и указатель на структуру с инфо. Кому надо конкретнее - пишите. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. | 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 |