Stack example
Сформировать стек. Анализируя стек, сформировать списки:
а) букв латинского алфавита;
б) литер цифр.
type
stack_p = ^stack_t;
stack_t = record
ch :char;
next:stack_p;
end;
var stack_root,lat_list_root,num_list_root,work:stack_p;
example:String;
i:byte;
procedure addToStack(var root:stack_p;uch:char);
var w:stack_p;
begin
if (root = nil) then
begin
new(w);
root := w;
end
else
begin
w := root;
while w^.next <> nil do
w:=w^.next;
new(w^.next);
w:=w^.next;
end;
w^.ch := uch;
w^.next := nil;
end;
procedure printStack(root:stack_p;title:String);
var w:stack_p;
begin
writeln(title);
w := root;
while w <> nil do
begin
write(w^.ch,',');
w:=w^.next;
end;
writeln;
end;
begin
example := 'This is an example. The 1st program has 234 lines.';
stack_root:=nil;
for i:=1 to length(example) do
addToStack(stack_root,example[i]);
if (stack_root=nil) then
begin
writeln('The stack is empty.');
halt(0);
end;
printStack(stack_root,'Original Stack');
lat_list_root:=nil;
num_list_root:=nil;
work:= stack_root;
while (work <> nil) do
begin
if (pos(work^.ch,'0123456789') >0)
then addToStack(num_list_root,work^.ch)
else addToStack(lat_list_root,work^.ch);
work:=work^.next;
end;
printStack(lat_list_root,'Latin letters list');
printStack(num_list_root,'Digits list');
end.
|