(双栈模拟数组)只使用两个栈结构 stack1和 stack2,模拟对数组的随机读取。作为栈结构,stack1和stack2只能访问栈顶(最后一个有效元素)。栈顶指针top1和 top2均指向栈顶元素的下一个位置。
输入第一行包含两个整数,分别是数组长度n 和访问次数m,中间用单个空格隔开。第二行包含n个整数,依次给出数组各项(数组下标从 0到n-1)。第三行包含 m个整数,需要访问的数组下标。对于每次访问,输出对应的数组元素。 (前两空每空 2.5分,其余每空3分,共14 分)
const
SIZE = 100;
var
stack1, stack2: array [0..SIZE] of integer;
top1, top2: integer;
n, m, i, j: integer;
procedure clearStack();
var
i: integer;
begin
for i := top1 to SIZE do
stack1[i] := 0;
for i := top2 to SIZE do
stack2[i] := 0;
end;
begin
read(n, m);
for i := 0 to n - 1 do
read(stack1[i]);
top1 := n ;
top2 := 0 ;
for j := 0 to m - 1 do
begin
read(i);
while (i < top1 - 1) do
begin
dec(top1);
stack2[top2]:=stack1[top1] ;
inc(top2);
end;
while (i > top1 - 1) do
begin
dec(top2);
stack1[top1]:=stack2[top2] ;
inc(top1);
end;
clearStack();
writeln(stack1[ top1-1 ]);
end;
end.