Queue/Definition: Difference between revisions
Content deleted Content added
→{{header|C}}: stripped usage (see FIFO(usage)) |
fortran |
||
Line 594: | Line 594: | ||
head @ @ head @ next head ! -1 used +! ; |
head @ @ head @ next head ! -1 used +! ; |
||
</lang> |
</lang> |
||
=={{header|Fortran}}== |
|||
{{works with|Fortran|90 and later}} |
|||
See [[FIFO (usage)]] for an example of <code>fifo_nodes</code> |
|||
<lang fortran>module FIFO |
|||
use fifo_nodes |
|||
! fifo_nodes must define the type fifo_node, with the two field |
|||
! next and valid, for queue handling, while the field datum depends |
|||
! on the usage (see [[FIFO (usage)]] for an example) |
|||
! type fifo_node |
|||
! integer :: datum |
|||
! ! the next part is not variable and must be present |
|||
! type(fifo_node), pointer :: next |
|||
! logical :: valid |
|||
! end type fifo_node |
|||
type fifo_head |
|||
type(fifo_node), pointer :: head, tail |
|||
end type fifo_head |
|||
contains |
|||
subroutine new_fifo(h) |
|||
type(fifo_head), intent(out) :: h |
|||
nullify(h%head) |
|||
nullify(h%tail) |
|||
end subroutine new_fifo |
|||
subroutine fifo_enqueue(h, n) |
|||
type(fifo_head), intent(inout) :: h |
|||
type(fifo_node), intent(inout), target :: n |
|||
if ( associated(h%tail) ) then |
|||
h%tail%next => n |
|||
h%tail => n |
|||
else |
|||
h%tail => n |
|||
h%head => n |
|||
end if |
|||
nullify(n%next) |
|||
end subroutine fifo_enqueue |
|||
subroutine fifo_dequeue(h, n) |
|||
type(fifo_head), intent(inout) :: h |
|||
type(fifo_node), intent(out), target :: n |
|||
if ( associated(h%head) ) then |
|||
n = h%head |
|||
if ( associated(n%next) ) then |
|||
h%head => n%next |
|||
else |
|||
nullify(h%head) |
|||
nullify(h%tail) |
|||
end if |
|||
n%valid = .true. |
|||
else |
|||
n%valid = .false. |
|||
end if |
|||
nullify(n%next) |
|||
end subroutine fifo_dequeue |
|||
function fifo_isempty(h) result(r) |
|||
logical :: r |
|||
type(fifo_head), intent(in) :: h |
|||
if ( associated(h%head) ) then |
|||
r = .false. |
|||
else |
|||
r = .true. |
|||
end if |
|||
end function fifo_isempty |
|||
end module FIFO</lang> |
|||
=={{header|Haskell}}== |
=={{header|Haskell}}== |