Для каких списков? Там public есть?
Да, с public
работает. Но почему раньше работало и без него?
Мне Админ говорил, что с самого начала только паблик и печатало. Может, вы что-то путаете… ну, или он
Приведите пожалуйста код. Код - лучшее доказательство.
Для односвязных списков конечно. С двусвязными так не поработаешь, мешают ссылки на предыдущий элемент, выводится слишком много всего=)
Опубликуйте код. У нас всё работает
Какой код? Для односвязных списков Ulysses уже объяснил мне, что дело было в public
. Для двусвязных списков у меня переполняется стек, если пробовать его вывести обычным Writeln
. Я и не думал, что это будет работать. Или это должно работать?
Опубликуйте текст программы, которая не работает.
Не публикуйте скриншоты. Мы их не умеем запускать.
type
DNode<T> = auto class
public
data: T;
prev, next: Dnode<T>;
end;
DList<T> = (DNode<T>, DNode<T>);
begin
var first := new DNode<integer>(1, nil, nil);
var last := new DNode<integer>(2, first, nil);
first.next := last;
Writeln(first);
end.
О, автокласс, а что ж вы на занятии не рассказали…
Если сделать без автокласса, то будет даже что-то выводиться.
type
DNode<T> = class
public
data: T;
prev, next: DNode<T>;
constructor(data: T; prev, next: DNode<T>);
begin
self.data := data;
self.prev := prev;
self.next := next;
end;
end;
DList<T> = (DNode<T>, DNode<T>);
begin
var first := new DNode<integer>(1, nil, nil);
var last := new DNode<integer>(2, first, nil);
first.next := last;
Writeln(first);
end.
Как я понимаю, вывод этих элементов зацикливается из-за ссылки на предыдущий. Но почему так не возникает переполнения стека?
Объясните, пожалуйста.
Ага, понятно.
С автоклассами тоже должно выводиться. Если бы Вы не зациклили список, то вывелось бы, а так заработали переполнение стека.
Так всё выводится:
type
DNode<T> = auto class
data: T;
prev, next: Dnode<T>;
end;
begin
var first := new DNode<integer>(1, nil, nil);
var last := new DNode<integer>(2, first, nil);
Writeln(last);
end.
Вывод без автоклассов не зацикливается. В этом случае он более интеллектуальный - как раз отслеживаются вот такие циклические структуры данных. Вывод прерывается при определенной глубине рекурсии - как раз для таких случаев чтобы исключить переполнение стека. Вместо оставшегося ставится …
Собственно, перед Вами - бесконечный список из чередующихся 1 и 2. Всё верно.
Спасибо, теперь всё понятно.
кстати, что будет со всей информацией по нашему бывшему 1 курсу(ныне 2) (на форуме) ?будет она как-то меняться?
Наша тема по практике уже в архиве. Было бы неплохо перенести и эту тему туда, а для первокурсников создать новую такую же.