【旧代码】fortran中的指针实现链表的代码

我不喜欢fortran,

奇怪的词法规则(竟然不用空格分开token),

io操作竟然是语言的一部分(这种非本质的东西像C那样用库来扩展多好)

。。。

 1 program link
 2 implicit none
 3 type node
 4     character(20) name
 5     integer id
 6     integer score
 7     type(node),pointer ::next
 8 end type
 9 
10 integer,parameter::num=3
11 type(node),pointer ::students
12 
13 call init_all(students,num)
14 call show_all(students)
15 print*,"now,we add a student"
16 call add_node(students)
17 call show_all(students)
18 print*,"now,we delete the student"
19 call del_node(students)
20 call show_all(students)
21 
22 
23 contains 
24 subroutine add_node(pos)
25 type(node),pointer ::pos,tmp
26 allocate(tmp)
27 tmp%name="abc"
28 tmp%id=1
29 tmp%score=100
30 print*,"please input name,id,end score of one students"
31 read*,tmp%name,tmp%id,tmp%score
32 if(associated(pos%next)) then
33 tmp%next=>pos%next
34 pos%next=>tmp
35 else 
36 nullify(tmp%next)
37 pos%next=>tmp
38 end if
39 end subroutine
40 
41 subroutine del_node(pos)
42 type(node),pointer ::pos,next
43 next=>pos%next
44 if(associated(next%next)) then
45 pos%next=>next%next
46 deallocate(next)
47 else
48 nullify(pos%next)
49 deallocate(next)
50 end if
51 end subroutine
52 
53 subroutine show_all(pos)
54 type(node),pointer ::pos,tmp
55 integer ::cnt
56 cnt=1
57 print*,"all students are:"
58 tmp=>pos
59 do while(associated(tmp))
60 print*,cnt,"th ",tmp%name,tmp%id,tmp%score
61 tmp=>tmp%next
62 cnt=cnt+1
63 end do
64 end subroutine
65 
66 subroutine init_all(pos,num)
67 type(node),pointer ::pos,tmp,walk
68 integer num
69 integer i
70 
71 allocate(tmp)
72 nullify(tmp%next)
73 call add_node(tmp)
74 pos=>tmp%next
75 deallocate(tmp)
76 walk=>pos
77 do i=1,num-1
78 call add_node(walk)
79 walk=>walk%next
80 end do
81 end subroutine
82 
83 end program link


我很少讨厌某种技术,坦诚的说,关于fortran,是有其他因素参合进来了。

posted on 2011-11-15 16:39  windydays  阅读(2404)  评论(0编辑  收藏  举报

导航