А где конец?

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

18 май 2004, 08:24

Встречалась мне такая задачка, даже знал когда-то ответ да забыл. Вот сейчас хочется совместно со всеми вспомнить -
Условия проще некуда - Определить зацикливается ли однонаправленный список. Понятно, что не методом сравнивания каждого нового элемента со всеми предыдущими.
laura
Сообщения: 10
Зарегистрирован: 17 май 2004, 09:57
Откуда: Omsk
Контактная информация:

18 май 2004, 08:29

Уточните, плиз, условия зацикливания однонаправленного списка.
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

19 май 2004, 16:31

laura писал(а):Уточните, плиз, условия зацикливания однонаправленного списка.
Устовие простое, если указатель на следующий элемент у одного из элеметнов указывает на элемент который был перед ним. т.е.

A->B
B->C
C->D
D->E
E->C // зацикливание
zeus
Сообщения: 16
Зарегистрирован: 30 апр 2004, 15:05
Откуда: Olimp
Контактная информация:

19 май 2004, 17:16

если нету нумерации то ИМХО никак кроме сравнения....
Нет бога, кроме процессора и ассемблер - пророк его.
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

20 май 2004, 16:21

Если указатель любого элемента списка _обязательно_ указывает на какой-либо элемент этого списка, то зацикливание будет всегда. Или список бесконечный.
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

20 май 2004, 16:38

chur писал(а):Если указатель любого элемента списка _обязательно_ указывает на какой-либо элемент этого списка, то зацикливание будет всегда. Или список бесконечный.
Если отталкиваться от этого утверждения, то надо всеголишь найти элемент у которого указатель будет равен NULL или определить, что такого элемента нет. В случае если список не зациклен, то это легко, а вот наоборот ? Ты будешь вечно по списку бегать
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

24 май 2004, 16:20

Определить зацикливается ли однонаправленный список. Понятно, что не методом сравнивания каждого нового элемента со всеми предыдущими.
Элементарно: запомнить указатель на первый (или на любой другой) элемент и, пробегая список, сравнивать с ним указатель на текущий элемент. Заметь - не со всеми сравнивать, а только с одним :) Если указатели совпали - список зациклен. Но если длина списка не ограничена, то и поиск может быть таким же. Правда, я с трудом представляю себе бесконечный зацикленный список :)
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

24 май 2004, 16:36

В приведнном мною примере, запомнили мы например указатель "A" и побежали по списку. Больше на "A" мы никогда не попадем а список всеравно зацикленный навечно
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

24 май 2004, 17:05

Пардон, я имел в виду случай полного цикла. А помечать пройденные элементы никак нельзя (типа флажок ставить - 'здесь был вася')?
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

24 май 2004, 17:27

Да нет, это было бы слишком просто
Ответить