Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. UNIT uCola;
  2.  
  3. INTERFACE
  4. USES uElem,uPrior;
  5.     TYPE
  6.  
  7.         TNodo = ^TAlmacen;
  8.  
  9.         TAlmacen = RECORD
  10.             info:TElem;
  11.             sig:TNodo;
  12.             prior:TPrior;
  13.         END;
  14.  
  15.         TCola = RECORD
  16.             cab,fin:TNodo;
  17.         END;
  18.  
  19.     PROCEDURE CrearColaVacia (VAR cola:TCola);
  20.  
  21.     PROCEDURE InsertarFinal (VAR cola:TCola; elem:TElem);
  22.  
  23.     FUNCTION EsColaVacia (cola:TCola):boolean;
  24.  
  25.     PROCEDURE QuitarCola (VAR cola:TCola);
  26.  
  27.     PROCEDURE PrimeroDeLaCola (cola:TCola;VAR primer:TElem);
  28.  
  29.     PROCEDURE BorrarCola (VAR cola:TCola);
  30.  
  31.     PROCEDURE MostrarCola (cola:TCola);
  32.  
  33.     PROCEDURE CopiarCola (cola:TCola; VAR colaCopia:TCola);
  34.  
  35.     FUNCTION ColasIguales (cola1,cola2:TCola):boolean;
  36.  
  37.     PROCEDURE InsertarSegunPrioridad (VAR cola:TCola; elem:TElem; prior:TPrior);
  38.  
  39. IMPLEMENTATION
  40.  
  41.     PROCEDURE CrearColaVacia (VAR cola:TCola);
  42.         BEGIN
  43.             cola.cab := NIL;
  44.             cola.fin := NIL;
  45.         END;{CrearColaVacia}
  46.  
  47.     PROCEDURE InsertarFinal (VAR cola:TCola; elem:TElem);
  48.         VAR
  49.             aux:TNodo;
  50.         BEGIN
  51.  
  52.             new(aux);
  53.             Asignar(aux^.info,elem);
  54.             aux^.sig := NIL;
  55.  
  56.             IF NOT(EsColaVacia(cola)) THEN
  57.                 cola.fin^.sig := aux
  58.             ELSE
  59.                 cola.cab := aux;
  60.  
  61.  
  62.             cola.fin := aux;
  63.  
  64.         END;{InsertarFinal}
  65.  
  66.     FUNCTION EsColaVacia (cola:TCola):boolean;
  67.         BEGIN
  68.             EsColaVacia := (cola.cab = NIL);
  69.         END;{EsColaVacia}
  70.  
  71.     PROCEDURE QuitarCola (VAR cola:TCola);
  72.         VAR
  73.             aux:TNodo;
  74.         BEGIN
  75.             IF NOT(EsColaVacia(cola)) THEN
  76.                 BEGIN
  77.                     aux := cola.cab;
  78.  
  79.  
  80.                     IF NOT(cola.cab = cola.fin) THEN
  81.                             cola.cab := cola.cab^.sig
  82.                     ELSE
  83.                         BEGIN
  84.                             cola.cab := NIL;
  85.                             cola.fin := NIL;
  86.  
  87.                         END;
  88.                     dispose(aux);
  89.  
  90.                 END;
  91.         END;{QuitarCola}
  92.  
  93.     PROCEDURE PrimeroDeLaCola (cola:TCola;VAR primer:TElem);
  94.         BEGIN
  95.             IF NOT(EsColaVacia(cola)) THEN
  96.                 primer := cola.cab^.info;
  97.         END;{PrimeroDeLaCola}
  98.  
  99.     PROCEDURE MostrarCola (cola:TCola);
  100.         BEGIN
  101.             WHILE NOT(EsColaVacia(cola)) DO
  102.                 BEGIN
  103.                     writeln(cola.cab^.info);
  104.                     cola.cab := cola.cab^.sig;
  105.                 END;{WHILE}
  106.         END;{MostrarCola}
  107.  
  108.     PROCEDURE BorrarCola (VAR cola:TCola);
  109.         BEGIN
  110.             WHILE NOT(EsColaVacia(cola)) DO
  111.                 BEGIN
  112.                     QuitarCola(cola);
  113.                 END;{WHILE}
  114.         END;{BorrarCola}
  115.  
  116.     PROCEDURE CopiarCola (cola:TCola; VAR colaCopia:TCola);
  117.         VAR
  118.             aux2:TNodo;
  119.         BEGIN
  120.             CrearColaVacia(colaCopia);
  121.             WHILE NOT(EsColaVacia(cola)) DO
  122.                 BEGIN
  123.  
  124.                     new(aux2);
  125.                     Asignar(aux2^.info,cola.cab^.info);
  126.                     aux2^.sig := NIL;
  127.  
  128.                     IF EsColaVacia(colaCopia) THEN
  129.                         BEGIN
  130.  
  131.                             colaCopia.cab := aux2;
  132.                             colaCopia.fin := aux2;
  133.  
  134.  
  135.                         END{IF}
  136.                     ELSE
  137.                         colaCopia.fin^.sig := aux2;
  138.  
  139.                     colaCopia.fin := aux2;
  140.                     cola.cab := cola.cab^.sig;
  141.  
  142.                 END;{WHILE}
  143.  
  144.         END;{CopiarCola}
  145.  
  146.     FUNCTION ColasIguales (cola1,cola2:TCola):boolean;
  147.         VAR
  148.             indicador:boolean;
  149.         BEGIN
  150.             IF (EsColaVacia(cola1)) AND (EsColaVacia(cola2)) THEN
  151.                 ColasIguales := TRUE
  152.             ELSE
  153.                 IF ( NOT(EsColaVacia(cola1)) AND (EsColaVacia(cola2)) ) OR ( (EsColaVacia(cola1)) AND NOT(EsColaVacia(cola2)) ) THEN
  154.                     ColasIguales := FALSE
  155.                 ELSE
  156.                     BEGIN
  157.                         indicador := TRUE;
  158.                         WHILE (indicador=TRUE) AND (NOT(EsColaVacia(cola1)) AND NOT(EsColaVacia(cola2))) DO
  159.                             BEGIN
  160.                                 indicador := Iguales(cola1.cab^.info , cola2.cab^.info);
  161.  
  162.                                 cola1.cab := cola1.cab^.sig;
  163.  
  164.                                 cola2.cab := cola2.cab^.sig;
  165.  
  166.                                 IF ( NOT(EsColaVacia(cola1)) AND (EsColaVacia(cola2)) ) OR ( (EsColaVacia(cola1)) AND NOT(EsColaVacia(cola2)) ) THEN
  167.                                     indicador := FALSE
  168.  
  169.                             END;{WHILE}
  170.  
  171.                         ColasIguales := indicador;
  172.                     END;{ELSE}
  173.  
  174.         END;{ColasIguales}
  175.  
  176.  
  177.  
  178.     PROCEDURE InsertarSegunPrioridad (VAR cola:TCola; elem:TElem; prior:TPrior);
  179.         VAR
  180.             aux,act,ant:TNodo;
  181.         BEGIN
  182.             IF EsColaVacia(cola) THEN
  183.                 BEGIN
  184.                     new(aux);
  185.                     Asignar(aux^.info,elem);
  186.                     AsignarPrior(aux^.prior,prior);
  187.                     aux^.sig := NIL;
  188.                     cola.cab := aux;
  189.                     cola.fin := aux;
  190.                 END {IF}
  191.             ELSE
  192.                 BEGIN
  193.                     ant := NIL;
  194.                     act := cola.cab;
  195.                     WHILE ( act <> NIL ) AND (MayorPrior(prior,act^.prior) = FALSE ) DO
  196.                         BEGIN
  197.                             ant := act;
  198.                             act := act^.sig;
  199.                         END;{WHILE}
  200.  
  201.                     new(aux);
  202.                     Asignar(aux^.info,elem);
  203.                     AsignarPrior(aux^.prior,prior);
  204.  
  205.                     IF act<>NIL THEN
  206.                         IF (Igual(act^.prior,prior)) THEN
  207.                             BEGIN
  208.                                 aux^.sig := act^.sig;
  209.                                 act^.sig := aux;
  210.  
  211.                                 IF act=cola.fin THEN
  212.                                         cola.fin := aux;
  213.                             END
  214.  
  215.                     ELSE
  216.                         IF (ant=NIL) THEN
  217.                             BEGIN
  218.                                 aux^.sig := cola.cab;
  219.  
  220.                                 cola.cab := aux;
  221.                             END
  222.  
  223.                         ELSE
  224.  
  225.                             IF (ant<>NIL) THEN
  226.                                 BEGIN
  227.  
  228.                                     ant^.sig := aux;
  229.                                     aux^.sig := act;
  230.  
  231.                                 END
  232.  
  233.                             ELSE
  234.  
  235.                             {IF act=NIL THEN}
  236.                                 BEGIN
  237.  
  238.                                     ant^.sig := aux;
  239.                                     aux^.sig := NIL;
  240.  
  241.                                     cola.fin := aux;
  242.  
  243.                                 END;
  244.             END;
  245.  
  246.         END; {InsertarSegunPrioridad}
  247.  
  248.  
  249.  
  250.  
  251. END.