恭喜,你发布的帖子
发布于 2022-10-26 07:48:57
2楼
老师,就堆栈取最小值的课后习题,我与提供的编程思路有所不同。我想问一下我的程序有什么弊端吗?
我是找出最小值,并将最小值与堆栈的最上面的元素互换,再出栈最上面的元素。而提供的是找出最小值,直接出栈,再将上面的元素逐一下移。但这样存在一个疑问,堆栈原理不是先进后出吗?如果最小值在中间位置的话,按照提供的程序是从中间位置直接出栈,这样是不是违背了堆栈原理?
我的代码:
REGION pop
IF #pop THEN
IF #statStackIndex <= 0 THEN
#error := TRUE;
#status := #STACK_EMPTY;
RETURN;
END_IF;
#statMin := 0;
IF #statStackIndex > 1 THEN
FOR #tempCount := 1 TO #statStackIndex - 1 DO
IF #stack[#tempCount] < #stack[#statMin] THEN
#statMin := #tempCount;
END_IF;
END_FOR;
#tempItem := #stack[#statMin];
#stack[#statMin] := #stack[#statStackIndex - 1];
#stack[#statStackIndex - 1] := #tempItem;
END_IF;
#item := #stack[#statStackIndex - 1];
#statStackIndex -= 1;
END_IF;
END_REGION
1、您的编程思路对于实现本题是没问题的,只是在取出最小值后,剩下元素的相对位置发生了改变,这对于本题的要求没有影响,但如果在实际应用中,要注意一下有没有这方面的要求。
2、课程中讲的先进后出是典型堆栈的原理,而这个习题是堆栈的灵活应用,相当于是变型堆栈,在实际应用中不会都是典型的应用,有些时候会是不同的变型,这就需要进行相应灵活的变化以适用,这也是很正常的。
请填写推广理由:
分享
只看
楼主