Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.033 c
14-1086268979
WebErr
2004-06-03 17:22
2004.06.20
Сканер штрих кода и его сообщения


14-1086265716
pap
2004-06-03 16:28
2004.06.20
есть идея создать программу и $ выгодно продать


14-1086337549
Baks
2004-06-04 12:25
2004.06.20
Таймер


14-1086155496
viktor
2004-06-02 09:51
2004.06.20
подписи компонентов


14-1086303218
mfender
2004-06-04 02:53
2004.06.20
winexec, или кто там...




   Наверх