Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.80 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 val2 < val1 then join qu2 qu1 else
  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 (Node(val1, (find_npl new_lq) + 1, new_rq, new_lq))
  20.       else (Node(val1, (find_npl new_rq) + 1, new_lq, new_rq))
  21.  
  22. let add el qu1 = join (Node(el, 0, empty, empty)) (qu1)
  23.  
  24. let delete_min qu1 =
  25.   match qu1 with
  26.   | Node (val1, npl1, lq1, rq1) -> (val1, join (lq1) (rq1))
  27.   | Null -> raise Empty
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement