Текущий архив: 2004.06.20;
Скачать: CL | DM;
Вниз
Списки Delphi Найти похожие ветки
← →
SkyRanger (2004-06-06 08:57) [0]Помогите плиз разобраться. Что то я туплю...
Есть пример показывающий работу со списком:
TValue = String;
PItem=^TItem;
TItem = record
Data : TValue;
Next : PItem;
end;
var
List : PItem;
procedure InsertFirst(var List : PItem; V : TValue);
var NewItem : PItem;
begin
New(NewItem);
NewItem^.Data := V;
NewItem^.Next :=List;
List := NewItem;
end;
procedure PrintList;
var
Item : PItem;
Begin
Item := List;
while Item <> nil do begin
Memo1.Lines.Add(Item^.Data);
Item:=Item^.next;
end; {while}
end;
List:=nil;
InsertFirst(List, "Data1");
InsertFirst(List, "Data2");
InsertFirst(List, "Data3");
Все работает, но в этом примере добавляются элементы в начало списка, а как добавлять их в конец? Что то я туплю и не могу понять, у меня не получается так сделать... :(
← →
Palladin © (2004-06-06 09:00) [1]Пройти до конца списка и назначить поле Next...
Нарисуй на бумажке как строится список и все поймешь...
← →
SkyRanger © (2004-06-06 09:03) [2]Рисовал, никак не въеду, заклинило, можно примерчик плиз???
← →
Palladin © (2004-06-06 09:09) [3]Примерчик чего? Бумаги чтоли?
В памяти сидит толпа записей PItem.
First
|
-------
Data
Next --> ---------
------- Data
Next --> ---------
--------- Data
Next --> ...
---------
У тебя в переменной List все время хранится начало списка, тоесть указатель на запись First...
пусть CurElement:=List; тогда соответственно что бы перейти на элемент №(N) тебе нужно N-1 раз выполнить CurElement:=CurElement^.Next;
← →
SkyRanger © (2004-06-06 10:53) [4]Огромное спасибо за разьяснения!
ПОлучилось!
Что то вроде этого:
New(NewItem);
NewItem^.Data := "Data1";
NewItem^.Next :=nil;
Root:=NewItem;
CurrItem:=Root;
Memo1.Lines.Add("Root="+Root^.Data);
New(NewItem);
NewItem^.Data := "Data2";
NewItem^.Next :=nil;
CurrItem^.Next:=NewItem;
CurrItem:=NewItem;
Memo1.Lines.Add("Curr="+CurrItem^.Data);
New(NewItem);
NewItem^.Data := "Data3";
NewItem^.Next :=nil;
CurrItem^.Next:=NewItem;
CurrItem:=NewItem;
Memo1.Lines.Add("Curr="+CurrItem^.Data);
CurrItem:=Root;
while (CurrItem^.Next<>nil) do
begin
Memo1.Lines.Add("While="+CurrItem^.Data);
CurrItem:=CurrItem^.Next;
end;
Memo1.Lines.Add("While="+CurrItem^.Data);
Item := Root;
while Item <> nil do begin
Memo1.Lines.Add(Item^.Data);
Item:=Item^.next;
end; {while}
while Root<>nil do begin
Item :=Root;
Root := Root^.Next;
Dispose(Item);
end; {while}
Страницы: 1 вся ветка
Текущий архив: 2004.06.20;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.038 c