ILE COBOL Programmer's Guide


Processing a Chained List Using Pointers

A typical application for using pointer data items is in processing a chained list (a series of records where each one points to the next).

For this example, picture a chained list of data that is composed of individual salary records. Figure 84 shows one way to visualize how these records are linked in storage:

Figure 84. Representation of a Chained List Ending with NULL

an illustration of the text, below

The first item in each record (except for the last record) points to the next record. The first item in the last record, in order to indicate that it is the last record, contains a null value instead of an address.

The high-level logic of an application that processes these records might look something like this:

    OBTAIN ADDRESS OF FIRST RECORD IN CHAINED LIST FROM ROUTINE
    CHECK FOR END OF THE CHAINED LIST
    DO UNTIL END OF THE CHAINED LIST
       PROCESS RECORD
       GO ON TO THE NEXT RECORD
    END

Figure 85 contains an outline of the processing program, CHAINLST, used in this example of processing a chained list.

Figure 85. ILE COBOL Program for Processing a Chained List


5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/CHAINLST        ISERIES1   03/09/15 13:45:02        Page      2
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID. CHAINLST.
     3     000300 ENVIRONMENT DIVISION.
     4     000400 DATA DIVISION.
           000500*
     5     000600 WORKING-STORAGE SECTION.
     6     000700 77  PTR-FIRST         POINTER  VALUE IS NULL.
     7     000800 77  DEPT-TOTAL        PIC 9(4) VALUE IS 0.
           000900*
     8     001000 LINKAGE SECTION.
     9     001100 01  SALARY-REC.
    10     001200   05  PTR-NEXT-REC    POINTER.
    11     001300   05  NAME            PIC X(20).
    12     001400   05  DEPT            PIC 9(4).
    13     001500   05  SALARY          PIC 9(6).
    14     001600 01  DEPT-X            PIC 9(4).
           001700*
    15     001800 PROCEDURE DIVISION USING DEPT-X.
           001900 CHAINLST-PROGRAM SECTION.
           002000 MAINLINE.
           002100*
           002200* FOR EVERYONE IN THE DEPARTMENT RECEIVED AS DEPT-X,
           002300* GO THROUGH ALL OF THE RECORDS IN THE CHAINED LIST BASED ON THE
           002400* ADDRESS OBTAINED FROM THE PROGRAM CHAINANC
           002500* AND ACCUMULATE THE SALARIES.
           002600* IN EACH RECORD, PTR-NEXT-REC IS A POINTER TO THE NEXT RECORD
           002700* IN THE LIST; IN THE LAST RECORD, PTR-NEXT-REC IS NULL.
           002800* DISPLAY THE TOTAL.
           002900*
    16     003000     CALL "CHAINANC" USING PTR-FIRST
    17     003100     SET ADDRESS OF SALARY-REC TO PTR-FIRST
           003200*
    18     003300     PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL
    19     003400        IF DEPT = DEPT-X THEN
    20     003500           ADD SALARY TO DEPT-TOTAL
           003600        END-IF
    21     003700        SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
           003800     END-PERFORM
           003900*
    22     004000     DISPLAY DEPT-TOTAL
    23     004100     GOBACK.
           004200
                           * * * * *   E N D   O F   S O U R C E   * * * * *


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]