Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.63 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.  
  22.     in let pelny_z_pelnym (Kolejka(wart_l, gl_l, lewy_l, prawy_l)) (Kolejka(wart_p, gl_p, lewy_p, prawy_p)) =
  23.         let d3 = join prawy_l d2
  24.         in match d3 with
  25.         | Kolejka(_, gl_nowy, _, _) ->
  26.             if gl_nowy + 1 < gl_l then Kolejka(wart_l, gl_nowy + 1, lewy_l, d3)
  27.             else Kolejka(wart_l, gl_l, d3, lewy_l)
  28.         | Pusta -> Pusta
  29.  
  30.     in let zamien d1 d2 =
  31.         match d1, d2 with
  32.         | Pusta, _ -> (d2, d1)
  33.         | _, Pusta -> (d1, d2)
  34.         | _, _ ->
  35.             let Kolejka(w1, _, _, _) = d1
  36.             in let Kolejka(w2, _, _, _) = d2
  37.             in if w1 < w2 then (d1, d2) else (d2, d1)
  38.  
  39.     in let (d1, d2) = zamien d1 d2
  40.     in match d1, d2 with
  41.     | Kolejka(_, _, _, _), Kolejka(_, _, _, _) -> pelny_z_pelnym d1 d2
  42.     | Kolejka(_, _, _, _), Pusta -> pusty_z_pelnym d1 d2
  43.     | Pusta, Pusta -> Pusta
  44.     | _, _ -> failwith("CoÅ› poszlo nie tak...")
  45. ;;
  46.  
  47. let add e q = join (Kolejka(e, 0, Pusta, Pusta)) q
  48.  
  49. let delete_min q =
  50.     match q with
  51.     | Pusta -> raise Empty
  52.     | Kolejka(e, _, lewy, prawy) -> (e, join lewy prawy)
  53. ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement