1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Вот такая задача "Используя очередь, распечатать в заданной последовательности символов сначала все цифры, затем остальные символы".Короче проходим сначла один раз по очереди печатаем цифры,второй раз остальные символы....я знаю как реализовать это используя две очереди...подскажите как сделать с одной..если это вообще возможно...
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 dobegin
q:=order[out]^.next; h:=q^.el;
if h in ['0'..'9']
thenbegin
write(' ',q^.el);
order[out]^.next:=q^.next;
if q^.next=nilthen order[in1]:=order[out];
dispose(q);
t:=t+1;
endelsebegin
order[out]^.next:=q^.next;
order1[in1]^.next:=q;
order1[in1]:=q;
end;
k:=k+1;
end;
k:=0;
while k<>n-t dobegin
q:=order1[out]^.next;
write(' ',q^.el);
order1[out]^.next:=q^.next;;
dispose(q);
k:=k+1;
end;
readkey;
end.
А зачем тебе 2 очереди? Заталкивай все в одну (включая завершающую точку), потом когда надо распечатать вначале только цифры, а потом - все остальное - делай так:
Код
While Голова_Очереди <> '.' Do Begin
If Голова_Очереди In ['0' .. '9'] Then Begin WriteLn(Голова_Очереди); Удалить_Элемент_Из_Очереди End Else Перенести_Элемент_В_Хвост
End;
Тогда после этого прохода у тебя в очереди останутся только НЕ цифры, и второй проход - "пока очередь не пуста просто распечатывать ее содержимое"...
Во вторую очередь я заталкиваю все не цифры....потому что у меня ума не хватает после того как я прошел очередь один раз и вывел цифры..пройти ту же самую очерь ещё раз и вывести то что там осталось....поэтому я вывожу элементы из другой второй очереди.....прохордя её тем самым первый раз......вот такие дела..