回复:堆栈取最小值的课后习题问题

Siemens_PLC编程精英训练营

西门子1847工业学习平台

  • 帖子

    1108
  • 精华

    0
  • 被关注

    15

论坛等级:侠圣

注册时间:2018-09-30

钻石 钻石 如何晋级?

发布于 2022-10-26 07:48:57

2楼

展开查看
以下是引用liuhqg在2022-10-25 11:20:43的发言 >楼主

老师,就堆栈取最小值的课后习题,我与提供的编程思路有所不同。我想问一下我的程序有什么弊端吗?

我是找出最小值,并将最小值与堆栈的最上面的元素互换,再出栈最上面的元素。而提供的是找出最小值,直接出栈,再将上面的元素逐一下移。但这样存在一个疑问,堆栈原理不是先进后出吗?如果最小值在中间位置的话,按照提供的程序是从中间位置直接出栈,这样是不是违背了堆栈原理?

我的代码:

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、课程中讲的先进后出是典型堆栈的原理,而这个习题是堆栈的灵活应用,相当于是变型堆栈,在实际应用中不会都是典型的应用,有些时候会是不同的变型,这就需要进行相应灵活的变化以适用,这也是很正常的。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

PLC编程精英训练营

共有1542条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。