Главная страница
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.038 c
14-1085566482
Ajax
2004-05-26 14:14
2004.06.20
Регистрация в РосНИИРОС


9-1077301746
Creep
2004-02-20 21:29
2004.06.20
Скажите ктонибудь пожалуйста где скачать Delphix


4-1084609439
VeTaL_Programmer
2004-05-15 12:23
2004.06.20
Как програмно в реестре записать данные в значение "По умолчанию"


3-1085664352
Jet
2004-05-27 17:25
2004.06.20
Table => Filter?


3-1085494417
linx
2004-05-25 18:13
2004.06.20
После внесения изменений в базу не могу подключиться снова.