MODULE LISTNODE TYPE NODE INTEGER :: INFO TYPE (NODE), POINTER :: NEXT END TYPE NODE END MODULE LISTNODE PROGRAM LISTSAMPLE2 USE LISTNODE IMPLICIT NONE TYPE (NODE), POINTER :: HEAD INTEGER NUMNODE ! we include the interface for TREEPRINT here INTERFACE RECURSIVE SUBROUTINE LISTPRINT(T) USE LISTNODE TYPE (NODE), POINTER :: T END SUBROUTINE LISTPRINT RECURSIVE FUNCTION GENLIST(N, NUMNODE) RESULT (T) USE LISTNODE TYPE (NODE), POINTER :: T INTEGER N, NUMNODE END FUNCTION GENLIST END INTERFACE ! (* initialization *) NUMNODE = 0 HEAD => GENLIST(8,NUMNODE) CALL LISTPRINT(HEAD) END PROGRAM LISTSAMPLE2 !* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * !* F U N C T I O N G E N T R E E * ! This generates a tree. n is a small positive integer ! specifying an upper bound on the number of nodes ! of the tree. The nodes can have two children, and ! an information field. The information field is !* given a sequential node number. * !* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * RECURSIVE FUNCTION GENLIST(N, NUMNODE) RESULT (T) USE LISTNODE IMPLICIT NONE INTEGER N, NUMNODE TYPE (NODE), POINTER ::T ALLOCATE(T) NUMNODE=NUMNODE+1 !numnode is the unique number !stored in each node after its creation T%INFO = NUMNODE IF (N<=1) THEN NULLIFY(T%NEXT) ELSE T%NEXT => GENLIST(N-1,NUMNODE) END IF END FUNCTION GENLIST !* * * * * * * * * * * * * * * * * * * * * * * * * * * * * !* S U B R O U T I N E L I S T P R I N T * !* The information fields of the nodes of a tree ! are printed so that the tree is rotated 90 degrees ! counter-clockwise. The nodes are given proper !* depths. * !* * * * * * * * * * * * * * * * * * * * * * * * * * * * * RECURSIVE SUBROUTINE LISTPRINT(T) USE LISTNODE IMPLICIT NONE TYPE (NODE), POINTER :: T INTEGER I IF (ASSOCIATED(T)) THEN WRITE(6,*) T%INFO CALL LISTPRINT(T%NEXT) END IF END SUBROUTINE LISTPRINT