Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Односвязный список,почему у меня не связывает? :)   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.065 c
14-1130687932
Kolan
2005-10-30 18:58
2005.11.20
Как написать плагин для FierFox


2-1131054605
ппп
2005-11-04 00:50
2005.11.20
Xor


14-1130003386
Loginov Dmitry
2005-10-22 21:49
2005.11.20
Каким образом должен развиваться MatriX?


5-1111314760
Начинающий программист
2005-03-20 13:32
2005.11.20
Добавление свойства к TTreeNode


2-1130945018
DroNIX
2005-11-02 18:23
2005.11.20
Заменить все заглавные буквы в предложении на АБ