Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1129054896
denissoft
2005-10-11 22:21
2005.11.20
Вопрос по написанию компонента, с двумя DataField-ыми


14-1130303971
Ega23
2005-10-26 09:19
2005.11.20
С днем рождения! 26 октября


2-1130580856
alexsis
2005-10-29 14:14
2005.11.20
Что такое BLOB ?


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


2-1130511655
Yura32
2005-10-28 19:00
2005.11.20
IP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский