11 2 PROGRAM POINTER 3 INTEGER POINTER P
- Slides: 56
• • • • • 下面再看一个例子 例11. 2 PROGRAM POINTER 3 INTEGER, POINTER: : P 1, P 2, P 3, P 4 INTEGER, TARGET: : X 1, X 2 INTEGER X, S 1, S 2, S 3, S 4, S 5 READ*, X 1, X 2 X=X 1*X 2 P 1=>X 1 P 2=>X 2 P 3=>X 1 P 4=>P 1 S 1=P 1*P 2 S 2=P 3*P 2 S 3=P 1*X 2 S 4=P 3*X 2 S 5=P 4*X 2 PRINT*, "X=", X
例11. 3 PROGRAM POINTER 3 INTEGER, POINTER: : P ALLOCATE(P) P=4 PRINT*, "P=", P END 输出结果为:P=4
例11. 4,ALLOCATE和DEALLOCATE函数的用法,程序如下: PROGRAM POINTER 4 INTEGER, POINTER: : P 1, P 2 INTEGER S ALLOCATE(P 1, P 2) READ*, P 1, P 2 S=P 1+P 2 DEALLOCATE(P 1, P 2) PRINT*, "S=", S END 输入 5 6 输出S=11
• REAL, DIMENSION(: ), POINTER: : X • READ*, A, B • C=A+B • D=A-B • E=A*B • IF(B. NE. 0)THEN • F=A/B • ELSE • F=0 • ENDIF
• ALLOCATE(X(6)) • X(1)=A • X(2)=B • X(3)=C • X(4)=D • X(5)=E • X(6)=F • WRITE(*, 100)X • 100 FORMAT(1 X, 3 F 8. 2) • DEALLOCATE(X) • END
VALUE NEXT 图 11. 3
• • 下面再看一个结构体定义的例子。 TYPE STUDENTNODE CHARACTER (15)NAME INTEGER NUM LOGICAL SEX CHARACTER (30)ADDRESS TYPE (STUDENTNODE),POINTER:: NEXT • END TYPE
• • • • TYPE NODE INTEGER VALUE TYPE (NODE), POINTER : : NEXT END TYPE NODE !链表的建立,规定以 0作为链表建立结束标志。 TYPE (NODE), POINTER : : CURRENT, L INTEGER NUM READ*, NUM NULLIFY( L ) ALLOCATE( CURRENT ) CURRENT % VALUE = NUM L => CURRENT DO WHILE (NUM /= 0)
• • READ*, NUM IF (NUM /= 0) THEN ALLOCATE( CURRENT ) CURRENT % VALUE = NUM CURRENT % NEXT => L L => CURRENT END IF END DO
• • • !链表的输出过程。 CURRENT => L PRINT*, CURRENT % VALUE CURRENT => CURRENT % NEXT DO WHILE (ASSOCIATED(CURRENT)) PRINT *, CURRENT % VALUE CURRENT => CURRENT % NEXT NODE END DO END 输入: 1 2 3 4 5 输出: 5 4 3 2 1
• • • !定义链表头指针 TYPE LIST PRIVATE TYPE (NODE), POINTER : : END TYPE LIST !模板函数所包含的内容 CONTAINS !删除函数DISPOSE( L ),用于清空链表。 SUBROUTINE DISPOSE( L ) TYPE (NODE), POINTER : : CURRENT TYPE (LIST) L
• • CURRENT => L % END DO WHILE (ASSOCIATED(L % END)) L % END => CURRENT % NEXT PRINT*, CURRENT % VALUE, ' IS ABOUT TO GO' DEALLOCATE( CURRENT ) CURRENT => L % END DO END SUBROUTINE DISPOSE
• • • !插入函数INSERT,通过插入结点建立链表 SUBROUTINE INSERT( L, NUM ) TYPE (NODE), POINTER : : CURRENT TYPE (LIST) L INTEGER NUM ALLOCATE( CURRENT ) CURRENT % VALUE = NUM CURRENT % NEXT => L % END => CURRENT END SUBROUTINE INSERT
• • • !遍历函数PRINTLIST,用来访问链表各结点, 并输出结点的值 SUBROUTINE PRINTLIST( L ) TYPE (NODE), POINTER : : CURRENT TYPE (LIST) L PRINT*, 'FROM THE END: ' CURRENT => L % END ! ALIAS OF LAST NODE DO WHILE (ASSOCIATED(CURRENT)) PRINT *, CURRENT % VALUE CURRENT => CURRENT % NEXT END DO
• END SUBROUTINE PRINTLIST • • • !初始化链表,使表头指针空 SUBROUTINE SETUP( L ) TYPE (LIST) L NULLIFY( L % END ) END SUBROUTINE SETUP END MODULE MODLINK
• • • • • !主函数部分,根据要求调用前面的函数。 PROGRAM TESTLIST USE MODLINK ! LINKED LIST IMPLEMENTATION IMPLICIT NONE TYPE (LIST) L INTEGER : : NUM = 1 CALL SETUP( L ) DO WHILE (NUM /= 0) READ*, NUM IF (NUM /= 0) THEN CALL INSERT( L, NUM ) END IF END DO CALL PRINTLIST( L ) CALL DISPOSE( L ) END PROGRAM TESTLIST
• 4 链表建立 • 建立方式用后插方式,即不断在表头结点后面加入新结点。 • SUBROUTINE INSERT( L, NAME 1, MARK 1, GRADE 1) • TYPE (NODE), POINTER : : CURRENT • TYPE (LIST) L • CHARACTER(15)NAME 1 • INTEGER MARK 1 • REAL GRADE 1 • ALLOCATE(CURRENT) !为CURRENT指针 分配空间和数据,生成结点。 • CURRENT%NAME=NAME 1 • CURRENT%MARK=MARK 1 • CURRENT%GRADE=GRADE 1 • CURRENT%NEXT =>L%END !将CURRENT指针生成的结 点连接到链表上。 • L%END => CURRENT !链表末尾指针后移,为连接新结 点做准备。 • END SUBROUTINE INSERT
• 7 数据更新 • 数据更新是根据给定的关键字查找到相应的记录后, 再将相关项更新。 • SUBROUTINE UPDATA(L, KEY) • TYPE (NODE), POINTER : : CURRENT • TYPE (LIST)L • CHARACTER(15)NEWNAME • INTEGER KEY, NEWGRADE • PRINT*, "请输入待更新项的关键字KEY" • READ*, KEY • PRINT*, "请输入待更新的其它项" • READ*, NEWNAME, NEWGRADE • CURRENT => L % END ! 从链表末尾开始
• DO WHILE (ASSOCIATED(CURRENT%NEXT)) • IF(CURRENT%MARK. EQ. KEY)THEN • CURRENT %NAME=NEWNAME • CURRENT %GRADE=NEWGRADE • GOTO 100 • ELSE • CURRENT => CURRENT % NEXT !查找下一个结点。 • ENDIF • END DO • PRINT*, '该项不存在,无法更新' • 100 CONTINUE • END SUBROUTINE UPDATA
• 8 链表输出 • • 程序如下: SUBROUTINE PRINTLIST( L ) TYPE (NODE), POINTER : : CURRENT TYPE (LIST)L PRINT*, 'FROM THE END: ' CURRENT => L % END DO WHILE (ASSOCIATED(CURRENT)) PRINT *, CURRENT %NAME, CURRENT %MARK, CURRENT %GRADE • CURRENT => CURRENT % NEXT • END DO
- Integer rules
- Constant pointer and pointer to constant
- Constant pointer and pointer to constant
- Constant pointer and pointer to constant
- Constant pointer and pointer to constant
- Constant pointer and pointer to constant
- Pointer expressions and pointer arithmetic in c
- Pointer pointer
- Pointer pointer
- Contoh program tipe data integer
- Pointer string array in c
- Write an integer for each situation worksheet
- Integer exponent rules
- Integers numbers
- Overflow cc
- Operator integer
- N++++
- Integer overflow attack
- Special functions algebra 2
- What is
- Integer adalah
- Uses crt;
- Prim 1
- Numerator denominator
- Var x integer
- Greatest integer function ti 84
- Whole numbers natural numbers integers
- Integer programming vs linear programming
- Linear vs integer programming
- R integer division
- Integer in vba
- Does integer contain decimal
- Number theory
- Definition of integers
- Integer values
- Jeopardy integers
- Integer football game
- Laws of integer exponents
- Integer programming course
- Integer division c++
- Flowchart integer
- Integer en visual basic
- Deep neural networks and mixed integer linear optimization
- Integer real string boolean
- Dancing stars
- Consecutive integer problems
- Integers rational numbers and whole numbers
- Integer exponents
- Explain integer pipeline of pentium
- Integer vitae scelerisque purus
- Aritmatika komputer
- Three consecutive even integers
- Is a whole number an integer
- Integer subtraction calculator
- 7-1 integer exponents
- Integer exponents
- Raised to negative exponent