Главная страница
    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.033 c
1-1129799131
Layner
2005-10-20 13:05
2005.11.20
Вводится ли шрифт балтийских языков в поле, где CHARSET=


3-1128580093
MVVD
2005-10-06 10:28
2005.11.20
Принтер и быстродействие


2-1130953198
getttr
2005-11-02 20:39
2005.11.20
Как разместить форму в правом нижнем углу десктопа?


2-1130505625
gvv
2005-10-28 17:20
2005.11.20
График Gantt


14-1130765663
oldman
2005-10-31 16:34
2005.11.20
Годограф Михайлова...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский