老师你好,关于堆栈中取最小值的课后习题,我做的答案和老师给的不同,但也能实现这个功能,我想问一下这两种编程方式的差异在哪里。
我的思路是在出栈时从堆栈的的底端开始向上逐一比较,如果第一位比第二位小,就直接换位,一直将最小值换到堆栈顶端,然后出栈。
老师的做法是:先找到最小值,然后出栈,再将最小值上面的数据下移。
下面的是我的代码
REGION Pop
IF #pop = TRUE THEN
IF #statStackIndex <= 0 THEN //判断空栈,如果已经空栈,则不执行出栈,并报错
#error := TRUE;
#status := #STACK_EMPTY;
RETURN;
END_IF;
//比较大小,将最小值移到堆栈顶部
IF #statStackIndex>1 THEN
// Statement section IF
FOR #tempcount := 0 TO #statStackIndex-2 DO
// Statement section FOR
IF #stack[#tempcount] < #stack[#tempcount + 1] THEN
// Statement section IF
#tempdata := #stack[#tempcount + 1];
#stack[#tempcount + 1] := #stack[#tempcount];
#stack[#tempcount] := #tempdata;
END_IF;
END_FOR;
END_IF;
#item := #stack[#statStackIndex - 1]; //否则取出元素
#statStackIndex -= 1; //堆栈指针下移
END_IF;
END_REGION