Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на очередь
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
LUZER
Вот такая задача "Используя очередь, распечатать в заданной последовательности символов сначала все цифры, затем остальные символы".Короче проходим сначла один раз по очереди печатаем цифры,второй раз остальные символы....я знаю как реализовать это используя две очереди...подскажите как сделать с одной..если это вообще возможно...
program dgdfgdfg;
 uses crt;
 type
  ref=^z;
  z=record
   next:ref;
   el:char;
     end;
   inout=(in1,out);
   FIFO=array[in1..out] of ref;
 var order,order1:FIFO;a,h:char;q:ref;n,k,t:integer;

begin
 clrscr;
 new(order[in1]);
 order[out]:=order[in1];
 order[in1]^.next:=nil;
  new(order1[in1]);
 order1[out]:=order1[in1];
 order1[in1]^.next:=nil;

  repeat
  readln(a);
  new(q);
  q^.next:=nil;
  q^.el:=a;
  order[in1]^.next:=q;
  order[in1]:=q;
  n:=n+1;
  until a='.';


  while k<>n do
   begin
      q:=order[out]^.next;  h:=q^.el;
       if h in ['0'..'9']
         then
          begin
            write(' ',q^.el);
            order[out]^.next:=q^.next;
            if q^.next=nil
              then order[in1]:=order[out];
            dispose(q);
             t:=t+1;
          end
         else
          begin
           order[out]^.next:=q^.next;
           order1[in1]^.next:=q;
           order1[in1]:=q;

            end;
      k:=k+1;

   end;
   k:=0;
   while k<>n-t do
    begin
     q:=order1[out]^.next;
     write(' ',q^.el);
     order1[out]^.next:=q^.next;;
     dispose(q);
     k:=k+1;
     end;
     readkey;
     end.
volvo
blink.gif blink.gif
А зачем тебе 2 очереди? Заталкивай все в одну (включая завершающую точку), потом когда надо распечатать вначале только цифры, а потом - все остальное - делай так:
Код
While Голова_Очереди <> '.' Do Begin

  If Голова_Очереди In ['0' .. '9'] Then Begin
    WriteLn(Голова_Очереди);
    Удалить_Элемент_Из_Очереди
  End
  Else Перенести_Элемент_В_Хвост

End;

Тогда после этого прохода у тебя в очереди останутся только НЕ цифры, и второй проход - "пока очередь не пуста просто распечатывать ее содержимое"...
Гость
Во вторую очередь я заталкиваю все не цифры....потому что у меня ума не хватает после того как я прошел очередь один раз и вывел цифры..пройти ту же самую очерь ещё раз и вывести то что там осталось....поэтому я вывожу элементы из другой второй очереди.....прохордя её тем самым первый раз......вот такие дела.. mega_chok.gif
LUZER
сори..не подписался....ты пишешь Else Перенести_Элемент_В_Хвост....как это сделать?
Гость
Всё допёрло ...сделал одной очередью.....въехал как в хвост добавить не цифры.....спасибо чел что время потратил...удаляй тему на хрен...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.