Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на двухсторонний список, с одним поинтером 
:(
    Опции темы
Goryachev
Дата 30.3.2005, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

Репутация: нет
Всего: нет



Задача:
Сделать двухсторонний список, пользуясь одним указателем в структуре, и двумя внешними указателями на список.

Обсудите.
Ответ приведу позже.
PM MAIL   Вверх
cardinal
Дата 31.3.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



В голову пришло следующее...

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  list.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Олег М
Дата 31.3.2005, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата(cardinal @ 31.3.2005, 02:34)
В голову пришло следующее...

smile Ну да, p1,p2 - указывают на текущю позицию, элементы указывают разные стороны - p1->item - в сторону головы, p2->item в сторону хвоста. При смене текущей позиции нужно менять указатели соответствующим образом
PM MAIL ICQ   Вверх
cardinal
Дата 31.3.2005, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата
p1->item - в сторону головы, p2->item в сторону хвоста

Я бы только сказал,
p1->item - в сторону текущего элемента, а p2->item в сторону его предыдущего элемента...
Уж больно трудно в таком списке сказать где голова, а где хвост... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
maxim1000
Дата 31.3.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



smile а я не понял задачи smile
что такое двусторонний список?


--------------------
qqq
PM WWW   Вверх
_hunter
Дата 31.3.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



список, двжение по элементам которого возможно и вперед и назад


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
maxim1000
Дата 31.3.2005, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



тогда не надо даже двух внешних указателей (достаточно одного)...
просто делаем кольцевой список, движение вперед - как обычно, движение назад - двигаемся вперед, пока не найдем элемент, который указывает на исходный smile

Это сообщение отредактировал(а) maxim1000 - 31.3.2005, 14:44


--------------------
qqq
PM WWW   Вверх
_hunter
Дата 31.3.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



а если элементов много? слишком долго ходить придется...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
maxim1000
Дата 31.3.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
а если элементов много? слишком долго ходить придется...

а о времени речь не шла smile
Цитата
которого возможно и вперед и назад




--------------------
qqq
PM WWW   Вверх
Олег М
Дата 31.3.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата(maxim1000 @ 31.3.2005, 17:25)
а о времени речь не шла

smile А о чём тогда вообще речь шла? Как раз об этом!
PM MAIL ICQ   Вверх
Goryachev
Дата 1.4.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

Репутация: нет
Всего: нет



cardinal
Очень круто все сделанно, но у тебя список изменяется динамически, итого: чтоб завершить работу с таким списком (если параметры by value), то надо будет возвращаться до начала обратно, чтоб плменять поинтеры на их начально правильное положение.
Теперь подумайте, как это сделать, не изменяя динамически поинтеры.
smile
PM MAIL   Вверх
cardinal
Дата 1.4.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(Goryachev @ 1.4.2005, 07:24)
чтоб завершить работу с таким списком (если параметры by value), то надо будет возвращаться до начала обратно

Это чтобы delete сделать чтоли? smile

А я его так сделаю:
См. шаг три. Я рекурсивно спущусь по p1 и p2 функцией, которая будеть выглядеть примерно так

функция (получает поинтер x)
{
if pointer(элемента) <> NULL ,то
функция(pointer(элемента));
else
delete x;
}

Цитата(Goryachev @ 1.4.2005, 07:24)
Теперь подумайте, как это сделать, не изменяя динамически поинтеры.

Может позже... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
yaja
Дата 4.4.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Не понял (((
По определению двунаправленный список, ето такая хрень, в которой для любого элемента можно получить предыдущий и следующий. Однако, при предложенных требованиях, очевидно, ето сделать нельзя. Т.ч уточните, что должен делать етот "список" )))
PM MAIL   Вверх
Goryachev
Дата 4.4.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

Репутация: нет
Всего: нет



Цитата(yaja @ 4.4.2005, 17:42)
По определению двунаправленный список, ето такая хрень, в которой для любого элемента можно получить предыдущий и следующий.

Не совсем. Если ты киваешь на определенный элемент, то можешь получить предыдущий и следующий.
Решение дам в субботу. Еще есть время подумать...

Это сообщение отредактировал(а) Goryachev - 4.4.2005, 22:21
PM MAIL   Вверх
yaja
Дата 8.4.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Что-то мне в голову такой изврат пришел в голову... smile smile smile smile
Будем хранить не указатель в каждом элементе, а xor указателей на предыдущий и на следущий, а внешние указатели будут хранить текущий элемент(p1) и элемент(p2) из которого мы пришли в p1. Тогда указатели на следущий и предыдущий элемент - p2 и (p1->xoredPointer) ^ p2 в зависимость откуда мы пришли в p1.
Вроде должно работать smile smile smile smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1297 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.