Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на очередь

Автор: LUZER 8.05.2006 5:13

Вот такая задача "Используя очередь, распечатать в заданной последовательности символов сначала все цифры, затем остальные символы".Короче проходим сначла один раз по очереди печатаем цифры,второй раз остальные символы....я знаю как реализовать это используя две очереди...подскажите как сделать с одной..если это вообще возможно...

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 8.05.2006 5:29

blink.gif blink.gif
А зачем тебе 2 очереди? Заталкивай все в одну (включая завершающую точку), потом когда надо распечатать вначале только цифры, а потом - все остальное - делай так:

Код
While Голова_Очереди <> '.' Do Begin

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

End;

Тогда после этого прохода у тебя в очереди останутся только НЕ цифры, и второй проход - "пока очередь не пуста просто распечатывать ее содержимое"...

Автор: Гость 8.05.2006 21:36

Во вторую очередь я заталкиваю все не цифры....потому что у меня ума не хватает после того как я прошел очередь один раз и вывел цифры..пройти ту же самую очерь ещё раз и вывести то что там осталось....поэтому я вывожу элементы из другой второй очереди.....прохордя её тем самым первый раз......вот такие дела.. mega_chok.gif

Автор: LUZER 8.05.2006 21:56

сори..не подписался....ты пишешь Else Перенести_Элемент_В_Хвост....как это сделать?

Автор: Гость 8.05.2006 22:20

Всё допёрло ...сделал одной очередью.....въехал как в хвост добавить не цифры.....спасибо чел что время потратил...удаляй тему на хрен...