메뉴 건너뛰기

SAP 한국 커뮤니티



abap class로 구현한 stack

정군 2009.03.20 18:58 조회 수 : 3817

예전에 블로그에 올렸던건데.. 심심해서 ^^;;;


여기도 올려봅니다.


근데... 그냥 글로 써도 될 걸 점수 때문인지 자료로 올리는 사람도 좀 있던데..


 


se24에서 하셔요.


 


 


자료구조론을 공부하면서 예제로 짜 본 코드입니다. 전공자가 아니다 보니 stack에 대해서 충실하게 구현했는지도 의문이고 숙제로 받은 것 중에 모든 메쏘드를 구현한 것도 아니지만 abap class를 공부하시는 분들은 참조로 보시면 조금 이해가 될까 해서 올립니다.


 


class name: ZCL_STACK


 


[method]


TOP           Instance Method Public
PUSH         Instance Method Public
ISEMPTY    Instance Method Public


[attributes]


STACK           Instance Attribute Public Type Ref To ZCL_STACK
OBJ               Instance Attribute Public Type Ref To OBJECT


[method implementation]


 +++ parameter


    TOP_STK Returning Type Ref To ZCL_STACK


 +++


    METHOD top .
      DATA: tmp_obj TYPE REF TO zcl_stack.


      tmp_obj = me.
      DO.
        IF tmp_obj->stack IS INITIAL.
          top_stk = tmp_obj.
          EXIT.
        ELSE.
          tmp_obj = tmp_obj->stack.
        ENDIF.
      ENDDO.
    ENDMETHOD.


 


 


 +++ parameter


    INPUT_OBJ Importing Type Ref To OBJECT


 +++


    METHOD push .


      DATA: tmp_obj TYPE REF TO zcl_stack.


      tmp_obj = me->top( ).
      IF 1 = tmp_obj->isempty( ).
        tmp_obj->obj = input_obj.
      ELSE.
        CREATE OBJECT stack.


        tmp_obj->stack = stack.
        stack->obj = input_obj.
      ENDIF.


    ENDMETHOD.


 


 


 +++ parameter


    RC Returning Type I


 +++


    METHOD isempty .
      IF me->obj IS INITIAL.
        rc = 1.            " empty
      ELSE.
        rc = 0.            " not empty
      ENDIF.
    ENDMETHOD.


 


 


[test program]


REPORT  z_stack                                                     .


START-OF-SELECTION.


  DATA: gc_stck1 TYPE REF TO zcl_stack.


  CREATE OBJECT gc_stck1.


  IF 0 = gc_stck1->isempty( ).
    WRITE:/ 'not empty'.
  ELSE.
    WRITE:/ 'empty'.
  ENDIF.


  DATA: any_object1  TYPE REF TO cl_htmlb_manager.
  DATA: any_object2  TYPE REF TO cl_htmlb_event.
  DATA: any_object3  TYPE REF TO cl_htmlb_inputfield.


  CREATE OBJECT any_object1.
  gc_stck1->push( any_object1 ).
  break-point.


  CREATE OBJECT any_object2.
  gc_stck1->push( any_object2 ).
  break-point.


  CREATE OBJECT any_object3.
  gc_stck1->push( any_object3 ).
  break-point.