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 1.71 KB | None | 0 0
  1. type 'x queue = Kolejka of 'x * int * 'x queue * 'x queue | Pusta
  2.  
  3. exception Empty
  4.  
  5. let empty = Pusta
  6.  
  7. let is_empty q = (q = Pusta)
  8.  
  9. let rec join d1 d2 =
  10.     let pusty_z_pelnym d puste =
  11.         let Kolejka(wart, gl, lewy, prawy) = d
  12.         in let d3 = join puste prawy
  13.         in match d3 with
  14.         | Kolejka(_, gl_d3, _, _) ->
  15.             if gl_d3 + 1 < gl then
  16.                 Kolejka(wart, gl_d3 + 1, lewy, d3)
  17.             else
  18.                 Kolejka(wart, gl, d3, lewy)
  19.         | Pusta ->
  20.             Kolejka(wart, 0, lewy, d3)
  21.     in let zamien d1 d2 =
  22.         match d1, d2 with
  23.         | Pusta, _ -> (d2, d1)
  24.         | _, Pusta -> (d1, d2)
  25.         | _, _ ->
  26.             let Kolejka(w1, _, _, _) = d1
  27.             in let Kolejka(w2, _, _, _) = d2
  28.             in if w1 < w2 then (d1, d2) else (d2, d1)
  29.     in let (d1, d2) = zamien d1 d2
  30.     in match d1, d2 with
  31.     | Kolejka(wart_l, gl_l, lewy_l, prawy_l), Kolejka(wart_p, gl_p, lewy_p, prawy_p) ->
  32.         let d3 = join prawy_l d2
  33.         in let Kolejka(_, gl_nowy, _, _) = d3
  34.         in if gl_nowy + 1 < gl_l then Kolejka(wart_l, gl_nowy + 1, lewy_l, d3)
  35.         else Kolejka(wart_l, gl_l, d3, lewy_l)
  36.     | Kolejka(_, _, _, _), Pusta -> pusty_z_pelnym d1 d2
  37.     | Pusta, Pusta -> Pusta
  38.     | _, _ -> failwith("Coś poszlo nie tak...")
  39. ;;
  40.  
  41. let add e q = join (Kolejka(e, 0, Pusta, Pusta)) q
  42.  
  43. let delete_min q =
  44.     match q with
  45.     | Pusta -> raise Empty
  46.     | Kolejka(e, _, lewy, prawy) -> (e, join lewy prawy)
  47. ;;
  48.  
  49. (*
  50.         | Kolejka(_, gl_nowy, _, _) ->
  51.             if gl_nowy + 1 < gl_l then Kolejka(wart_l, gl_nowy + 1, lewy_l, d3)
  52.             else Kolejka(wart_l, gl_l, d3, lewy_l)
  53.         | _ -> failwith("Coś poszlo nie tak...")
  54. *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement