Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2014, 23:26
Abikutin Abikutin вне форума
Прохожий
 
Регистрация: 22.06.2014
Сообщения: 6
Версия Delphi: Delphi 7 ,
Репутация: 10
По умолчанию Очередь. Не получается добавлять в конец

Очередь через односвязные списки.
Код:
type
Tinfo=record
FamIO, Nazv: string[20];
Year: integer;
end;

PElem=^TElem;
  TElem=record
          Info: TInfo;
          Next: PElem;
  End;

TOcher = record
First, Last : PElem; //Указатели на первый и на последний элемент очереди.
end;

Процедура добавления в конец.
Код:
procedure AddLast(var Ocher: TOcher; var Data : TInfo);
var NewElem:PElem;
begin
new(NewElem);
NewElem^.Info := Data;
NewElem^.Next := Ocher.First;
Ocher.first := NewElem;
end;

Проверка на пустоту очереди
Код:
function IsEmpty(var Ocher: TOcher): Boolean;
begin
if (Ocher.First = nil) then
Result := true
else
Result := false;
End;

Процедура удаления с начала.
Код:
procedure DelFirst(var Ocher: TOcher); //удаление(первого)
begin
if IsEmpty(Ocher) then Ocher.Last:=nil
else
Ocher.First:=Ocher.First.Next;
end;

Процедура перебора элементов
Код:
Procedure Pereklad(var Ocher1, Ocher2:TOcher);
var Info:TInfo;
begin
  Info:=Ocher1.first.Info;
  AddLast(Ocher2,Info);
  DelFirst(Ocher1);
end;


Кнопка добавления в очередь
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
r:TInfo;
begin
r.FamIO:=Edit1.Text;
r.Nazv:=Edit2.Text;
r.Year:=StrToInt(Edit3.Text);
if (Edit1.text<>'') and (Edit2.text<>'') and (Edit3.text<>'') then
AddLast(Ocher,r);

end;

Кнопка вывода в список(в Лист Бокс)
Код:
procedure TForm1.Button4Click(Sender: TObject);
var DopOcher:TOcher;
begin
OcherInit(DopOcher);
List.Items.Clear;
If IsEmpty(Ocher) then List.Items.Add('(пусто)');

while not IsEmpty(Ocher) do
begin;
List.Items.Add(Ocher.First.Info.FamIO +'       '+ Ocher.First.Info.Nazv +'             '+ IntToStr(Ocher.First.Info.Year));
  Pereklad(Ocher,DopOcher);
end;
while not IsEmpty(DopOcher) do
begin;
  Pereklad(DopOcher,Ocher);
end;

end;


в итоге добавляет , но в начало. Как изменить так, чтобы добавлял в конец?
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025