Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - стек, список в паскале абц (поясните)

Ответить
Настройки темы
Разное - стек, список в паскале абц (поясните)

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 08-01-2013
Описание: тег hide не нужен оказался
вобщем есть программа, рабочая 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.

Отправлено: 14:59, 08-01-2013

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Цитата Евгений_Еров@vk:
не пойму процедуру удаления
зачем нам ? »
Зачем нужна процедура удаления или как она работает?
Если зачем -- то для красоты и полного набора функционала. Создание/добавление/удаление.
Если как -- убивает ссылки и стирает данные, высвобождая память.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:38, 09-01-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


блин...модераторы наверно убрали... я хотел узнать что делает
Код: Выделить весь код
while u^.next<>first do 
        begin
          u:=u^.next; 
        end;
   first:=u; 
   first^.next:=nil;
в процедуре удаления

Отправлено: 19:22, 10-01-2013 | #3


Аватара для ViRTaCe

Пользователь


Сообщения: 139
Благодарности: 11

Профиль | Отправить PM | Цитировать


Полностью очищает стек

-------
Кривые руки исправляются опытом.


Отправлено: 03:00, 11-01-2013 | #4


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата ViRTaCe:
Полностью очищает стек »
Стек тут не причем, здесь обрывается цепочка нод и последней полю next присваивается nil

Отправлено: 09:21, 11-01-2013 | #5


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


то есть этот кусочек удаляет указатель на удаленный элемент?

Отправлено: 20:44, 13-01-2013 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Нет, этот код присваивает указателю значение nil, а зтем элемент удаляется dispose(v);

Отправлено: 22:25, 13-01-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - стек, список в паскале абц (поясните)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Стек ve4niy Программирование и базы данных 2 17-04-2011 22:41
Разное - Стек в Паскале zena Программирование и базы данных 0 30-11-2010 22:50
Log/Monitoring - стек OSI на Windows mall-rnd Сетевые технологии 0 17-02-2010 17:57
C/C++ - Класс стек и очередь на с++ aina Программирование и базы данных 8 30-12-2009 07:54
Теория - Стек, заданный списком, на Паскале. ManHack Программирование и базы данных 9 07-04-2009 23:48




 
Переход