用ABAP类实现队列

REPORT  ZPAB06_QUEUE.

CLASS QUEUE DEFINITION.
  PUBLIC SECTION.
*Because the class is just for display.so the queue only can store
*integer.
    TYPES:BEGIN OF ST_QUEUE,
            ITEM TYPE I,
          END OF ST_QUEUE.
    DATA: NITEMS TYPE I READ-ONLY.                 "THE QUANTITY OF ITEM
    DATA: ITAB   TYPE TABLE OF ST_QUEUE,           "THE ITAB STORE ITEM
          WA     LIKE LINE OF ITAB.                "THE WA OF ITAB.
    METHODS:CONSTRUCTOR,                           "CONSTRUCTOR
            INSERT IMPORTING ITEM TYPE I,          "insert items
            REMOVE RETURNING VALUE(ITEM) TYPE I    "Remove the first ONE
                   EXCEPTIONS NOITEMS,             "NO ITEM IS QUEUE.
            PEEKFRONT RETURNING VALUE(ITEM) TYPE I "GET THE VALUE OF 1st
                      EXCEPTIONS NOITEMS,          "NO ITEM IS QUEUE.
*X='1' IF THE QUEUE IS EMPTY ELSE X = 0
            ISEMPTY   RETURNING VALUE(X) TYPE I.
ENDCLASS.
CLASS QUEUE IMPLEMENTATION.
  METHOD CONSTRUCTOR.                              "CONSTRUCTOR
*initialize the queue
     NITEMS = 0.
     CLEAR ITAB.
  ENDMETHOD.
  METHOD INSERT.                                   "insert items
    CLEAR WA.                               "clear the work area
    WA-ITEM = ITEM.
    APPEND WA TO ITAB.                      "insert the items into queue
    NITEMS = NITEMS + 1.                           "ONE MORE ITEM
  ENDMETHOD.
  METHOD REMOVE.                                   "Remove the first one
    CLEAR WA.                               "clear the work area
    IF NITEMS <> 0.                   "Do while there are items in queue
      READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
      DELETE ITAB INDEX 1.            "REMOVE THE ITEM.
      ITEM = WA-ITEM.                 "Returning the value
      NITEMS = NITEMS - 1.            ""ONE LESS ITEM
    ELSE.
      RAISE NOITEMS.                  "there are no items.
    ENDIF.
  ENDMETHOD.
  METHOD PEEKFRONT.
    CLEAR WA.                         "clear the work area
    IF NITEMS <> 0.                   "Do while there are items in queue
      READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
      ITEM = WA-ITEM.                 "Returning the value
    ELSE.
      RAISE NOITEMS.                  "there are no items.
    ENDIF.
  ENDMETHOD.
  METHOD ISEMPTY.
     IF NITEMS = 0.                   "THE QUEUE IS EMPTY
       X = 1.
     ELSE.                            "THE QUEUE IS NOT EMPTY
       X = 0.
     ENDIF.
  ENDMETHOD.
ENDCLASS.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值