不是VIP会员,不能显示答案

题目解答

题目:
(双栈模拟数组)只使用两个栈结构 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.
考点:
分析:
解答:
评论:
老师: