Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.051 c
14-1086182913
XYZ
2004-06-02 17:28
2004.06.20
Работа со сканером штрих-кодов


14-1086250079
Igorek
2004-06-03 12:07
2004.06.20
Колличество дней между двумя датами.


1-1086365046
BestMaster
2004-06-04 20:04
2004.06.20
FFT/CFFT Componet (Fast Furie Transformation/Complex Fast Furien)


4-1084536722
Алексей Шолкин
2004-05-14 16:12
2004.06.20
вопрос по написанию программы передачи данных через порты


14-1085942124
RealRascal
2004-05-30 22:35
2004.06.20
Наши в Mathcad?