Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.83 KB | None | 0 0
  1. type 'a queue = Node of 'a * int * 'a queue * 'a queue | Null
  2. let empty = Null
  3. let is_empty qu1 = qu1 = empty
  4. exception Empty
  5.  
  6. let find_npl qu1 =
  7.   match qu1 with
  8.   | Node (_, b, _, _) -> b
  9.   | Null -> (-1)
  10.  
  11. let rec join qu1 qu2 =
  12.   match qu1, qu2 with
  13.   | Null, a -> a
  14.   | a, Null -> a
  15.   | Node (val1, _, lq1, rq1), Node (val2, _, lq2, rq2) ->
  16.     if val1 <= val2 then
  17.       let new_lq = join (qu2) (rq1) in
  18.       let new_rq = lq1 in
  19.       if find_npl new_lq <= find_npl new_rq then
  20.         (Node(val1, (find_npl new_lq) + 1, new_rq, new_lq))
  21.       else
  22.         (Node(val1, (find_npl new_rq) + 1, new_lq, new_rq))
  23.  
  24.     else join qu2 qu1
  25.  
  26. let add el qu1 = join (Node(el, 0, empty, empty)) (qu1)
  27.  
  28. let delete_min qu1 =
  29.   match qu1 with
  30.   | Node (val1, npl1, lq1, rq1) -> (val1, join (lq1) (rq1))
  31.   | Null -> raise Empty
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement