Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2013, 19:50   #1
Quadrelle
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 2
По умолчанию Реализация очереди с элементами из списка

Здравствуйте! Написал программу реализации двусвязного списка. Никак не получается реализовать очередь так, чтобы элементами очереди были элементы списка, т.е. надо завести новый тип Queue = record c элементами из списка Items:List; и написать процедуры push и pop и showQueue, такие, что в них будет вызов аналогичных процедур из списка. Так же это можно реализовать через модуль, но тоже без понятия как.

Что получилось:
Код:
Queue = record
Items: List;
end;
proc QueuePut(var q :Queue; e :ItemType);
begin
Push(q.Items,e); <-- процедура, которая используется в списке.
end;



Если через модули, то вот все знания:
Код:
uses List;
unit List;

Вот реализация списка, с которым надо связать очередь
Код Pascal
Код:
program List;
type
  TData = integer;
  ListLinkPtr = ^ListLink;
  ListLink=record
      Data: TData;
      next, prev: ListLinkPtr;
    end;
 
  TList=record
  head, tail: ListLinkPtr;
  end;
 
 
function IsEmpty(var List: TList): Boolean;
  begin
    IsEmpty := (List.head = nil);
  end;
 
procedure ShowList(var List: TList);
  Var p: ListLinkPtr;
  begin
    If isEmpty(List) then
      begin
        WriteLn('Очередь пуста');
      end;
 
    p := List.head;
    while p <> nil do
      begin
        Write( p^.Data, ' ' );
        p := p^.next
      end;
    WriteLn
  end;
 
procedure Push(var List: TList; Data: TData);
  var p: ListLinkPtr;
  begin
    new(p);
    p^.next := nil;
    p^.prev := List.tail;
    p^.Data := Data;
 
    if List.tail <> nil then
      List.tail^.next := p
    else
      List.head := p;
      List.tail := p;
      writeln;
  end;
 
function Pop(var List: TList): TData;
  var t: ListLinkPtr;
  begin
    Pop := 0;
    t := List.head;
    List.head := t^.next;
 
    if List.head <> nil then
      List.head^.prev := nil
    else
      List.tail := nil;
 
    Pop := t^.Data;
    Dispose(t);
  end;
 
procedure InitList(var List: TList);
  begin
    List.head := nil;
    List.tail := nil;
  end;
 
procedure DeleteList(var List: TList);
  begin
    while not IsEmpty(List) do Pop(List);
  end;
  
  
var
List: TList;
i:integer;
x:integer;
s:boolean;
 
begin
InitList(List);
for i:=1 to 5 do begin
Push(List,i);
end;
writeln( 'Исходная очередь:' );
ShowList(List);
writeln;
x:=Pop(List);
Writeln('Головной эдемент:' );
write(x);
writeln;
writeln;
writeln( 'Новая очередь:' );
ShowList(List);
writeln;
Writeln('Очередь пустая?');
s:=IsEmpty(List);
write(s);
writeln;
writeln;
DeleteList(List);
ShowList(List);
end.

Последний раз редактировалось Stilet; 20.04.2013 в 21:21.
Quadrelle вне форума Ответить с цитированием
Старый 20.04.2013, 22:05   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Очередь можно реализовать по-разному.
Один из вариантов - посредством списка.
По сути дела, если Вы храните у списка оба конца, то его 1 к 1 можно использовать как очередь. PUSH и POP будут всего лишь вставкой в один конец списка и извлечение из другого.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация очереди через массив (Delphi) wertret Помощь студентам 2 24.04.2012 02:25
Реализация контейнера на базе очереди. Delphi medvedeva Помощь студентам 0 26.06.2011 13:36
Создание формы-списка с элементами из БД maryan.vetrov PHP 10 24.12.2010 04:49
Реализация очереди! Lazio Помощь студентам 2 08.04.2009 17:41