Форум: "Основная";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизОдносвязный список,почему у меня не связывает? :) Найти похожие ветки
← →
John Doe © (2005-10-28 23:10) [0]var
frmLink: TfrmLink;
Aux,Help: PSimpleNode;
implementation
{$R *.dfm}
procedure TfrmLink.FormCreate(Sender: TObject);
begin
Aux:=nil;
end;
procedure TfrmLink.btnTestClick(Sender: TObject);
var NewOne: PSimpleNode;
begin
New(NewOne);
NewOne^.Data:=Edit1.Text;
NewOne^.Next:=Aux;
Aux:=NewOne;
while Aux<>nil do
begin
ShowMessage(Aux^.Data);
Aux:=Aux^.Next;
end;
end;
end.
Почему он выдает мне только 1 строку в ShowMessage(Aux^.Data),а не весь список?
Получается,что Aux=nil,после первого прохода...
Но почему?
← →
Zeqfreed © (2005-10-28 23:23) [1]John Doe © (28.10.05 23:10)
>procedure TfrmLink.FormCreate(Sender: TObject);
>begin
> Aux:=nil;
>end;
>
>procedure TfrmLink.btnTestClick(Sender: TObject);
>var NewOne: PSimpleNode;
>begin
> New(NewOne);
> NewOne^.Data:=Edit1.Text;
> NewOne^.Next:=Aux;
> Aux:=NewOne;
>
> while Aux<>nil do
> begin
> ShowMessage(Aux^.Data);
> Aux:=Aux^.Next;
> end;
>
> end;
← →
Defunct © (2005-10-29 02:02) [2]Zeqfreed © (28.10.05 23:23) [1]
ну и что?
ошибки у него в организации списка нет. Код рабочий.
Ошибка в выводе списка (надо не с последнего элемента, а с первого).
John Doe © (28.10.05 23:10)
Проблема в том, что список у тебя связан в обратную строну. Запоминай голову списка и не теряй ее.
← →
sniknik © (2005-10-29 04:59) [3]procedure TfrmLink.btnTestClick(Sender: TObject);
var
NewOne, Aux: PSimpleNode;
i: integer;
begin
New(NewOne); //начальный указатель не трогать больше, а то потеряеш весь список.
Aux:= NewOne;
Aux^.Data:= "Root 0";
for i:= 1 to 10 do begin
New(Aux^.Next);
Aux:= Aux^.Next;
Aux^.Data:= "Next " + IntToStr(i);
end;
Aux:= NewOne; //все операции после начинаются с "корня"
while Aux <> nil do begin
ShowMessage(Aux^.Data);
Aux:=Aux^.Next;
end;
end;
← →
Zeqfreed © (2005-10-29 13:04) [4]Defunct © (29.10.05 2:02) [2]
Из [0]:
> Почему он выдает мне только 1 строку в
>ShowMessage(Aux^.Data),а не весь список?
>Получается,что Aux=nil,после первого прохода...
> Но почему?
Я показал, почему выдает только первую строку. А то, что список неправильный я и не говорил.
← →
John Doe © (2005-10-29 13:11) [5]to Siknik
Да,да я теперь понял.
Ты правильно заметил.
Получалось что я доводил Aux до nil.
А потом при новом обращении к процедуре,NewOne^Next ссылался не на педыдущий элемент списка,а на nil.
Потому прога и выдавала мне только 1 строку.
Нда...
Идиотизм. :)
← →
John Doe © (2005-10-29 18:50) [6]А вообще мастера,скажите мне...
Часто ли вы применяте связные списки.
И в каких случаях он нужен,ну кроме того,чтоб бережно распределять память.
← →
Anatoly Podgoretsky © (2005-10-29 18:59) [7]John Doe © (29.10.05 18:50) [6]
Бережным распределением памяти и не пахнет.
← →
Zeqfreed © (2005-10-29 19:32) [8]John Doe © (29.10.05 18:50) [6]
Использовать связанные списки стоит тогда, когда идет интенсивное создание/удаление/перемещение элементов, только стоит использовать некие дополнительные "ухищрения" с выделением памяти (т.е. не выделять память при каждом добавлении элемента). Так же связанные списки хороши, когда требуется последовательная обработка элементов, "перескоки" осуществляются медленно.
← →
John Doe © (2005-10-29 19:52) [9]
> Так же связанные списки хороши, когда требуется последовательная
> обработка элементов
>
Может и так.
Но к сожалению работа с ними как я вижу "и опасна,и трудна" :)
← →
tesseract © (2005-10-29 21:05) [10]
> Может и так.
> Но к сожалению работа с ними как я вижу "и опасна,и трудна"
> :)
Все базовые алгоритмы знать нужно, алгоритмы и анализ их работы рекомендую прочитать в "Фундаментальные алгоритмы и типы данных в DELPHI" там и списки и очереди.
> Так же связанные списки хороши, когда требуется последовательная
> обработка элементов, "перескоки" осуществляются медленно.
>
Списки хороши кода нужно хранить МНОГО плохо структурированной либо разнотипной информации. Они гибче но медленнее. Как правило создаётся доп массив с ссылками на элементы списка.
← →
John Doe © (2005-10-29 21:21) [11]
> Все базовые алгоритмы знать нужно, алгоритмы и анализ их
> работы рекомендую прочитать в "Фундаментальные алгоритмы
> и типы данных в DELPHI" там и списки и очереди.
Хе...
А я думаешь это откуда взял?
Просто чуть модифицировал пример.
Чуть усложнил.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c