 |
|
Евгений_Еров@vk |
08-01-2013 14:59 2061801 |
стек, список в паскале абц (поясните)
вобщем есть программа, рабочая 100%
не пойму процедуру удаления
зачем нам ?
Код:
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
uses Formsabc;
type
PNode = ^TNode; //Это наш указатель (ссылка)
TNode = record //описание одной ячейки очереди
color: string[30]; // рабочие данные
kod:string[10];
next: PNode; // указатель на следующий элемент очереди
end;
var
first,last: PNode; // переменная, через которую будет общаться с очередью - это и есть "голова" очереди
bt1,bt2,bt3:button;
l:listbox;
d,k:Field;
procedure Add(var first:PNode;var last:PNode);
var n:PNode;
Begin
new(n);
n^.color:=d.text;
n^.kod:=k.text;
n^.next:=nil;
if first=nil then
begin
first:=n;
last:=n;
end
else
begin
n^.next:=last;
last:=n;
end;
End;
procedure Addelement;
begin
Add(first,last);
end;
procedure Print;
var r:PNode;
begin
l.Items.Clear();
r:=Last;
while r<>nil do
begin
l.Items.Add(r^.color+' - '+r^.kod.ToString());
r:=r^.next;
end;
end;
procedure del(var first,last:PNode);
Var v:PNode; u:PNode;
begin
if first=last then
begin
dispose(last);
first:=nil;
last:=nil;
end
else
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
end;
end;
procedure delelement;
begin
del(first,last);
end;
procedure Main;
Begin
bt1:=new Button('Добавить');
bt2:=new Button('Показать');
bt3:=new Button('Удалить');
LineBreak;
d:=new Field('Цвет',150);
LineBreak;
k:=new Field('код цвета',100);
LineBreak;
l:=new ListBox();
LineBreak;
bt1.click+=Addelement;
bt2.Click+=Print;
bt3.Click+=delelement;
end;
BEGIN
Main;
END.
|
Цитата:
Цитата Евгений_Еров@vk
не пойму процедуру удаления
зачем нам ? »
|
Зачем нужна процедура удаления или как она работает?
Если зачем -- то для красоты и полного набора функционала. Создание/добавление/удаление.
Если как -- убивает ссылки и стирает данные, высвобождая память.
|
Евгений_Еров@vk |
10-01-2013 19:22 2063618 |
блин...модераторы наверно убрали... я хотел узнать что делает
Код:
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
в процедуре удаления
|
Стек тут не причем, здесь обрывается цепочка нод и последней полю next присваивается nil
|
Евгений_Еров@vk |
13-01-2013 20:44 2066052 |
то есть этот кусочек удаляет указатель на удаленный элемент?
|
Нет, этот код присваивает указателю значение nil, а зтем элемент удаляется dispose(v);
|
Время: 07:07.
© OSzone.net 2001-