Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. UNIT uListaOrd;
  2.  
  3. INTERFACE
  4. USES uElem;
  5.  
  6.     TYPE
  7.         TListaOrd = ^TNodo;
  8.  
  9.         TNodo = RECORD
  10.             info:TElem;
  11.             sig:TListaOrd;
  12.         END;
  13.  
  14.     PROCEDURE CrearListaVacia (VAR lista:TListaOrd);
  15.  
  16.     PROCEDURE Insertar (VAR lista:TListaOrd; elem:TElem);
  17.  
  18.     PROCEDURE Resto (VAR lista:TListaOrd);
  19.  
  20.     FUNCTION EsListaVacia (lista:TListaOrd):boolean;
  21.  
  22.     PROCEDURE InsertarFinal (VAR lista:TListaOrd; elem:TElem);
  23.  
  24.     PROCEDURE MostrarLista (lista:TListaOrd);
  25.  
  26.     FUNCTION Pertenece (lista:TListaOrd; elem:TElem):boolean;
  27.  
  28.     PROCEDURE Avanzar (VAR lista:TListaOrd);
  29.  
  30.     PROCEDURE BorrarLista (VAR lista:TListaOrd);
  31.  
  32. IMPLEMENTATION
  33.  
  34.     PROCEDURE CrearListaVacia (VAR lista:TListaOrd);
  35.         BEGIN
  36.             lista := NIL;
  37.         END;{CrearListaVacia}
  38.  
  39.     PROCEDURE Insertar (VAR lista:TListaOrd; elem:TElem);
  40.         VAR
  41.             aux,ant,act:TListaOrd;
  42.         BEGIN
  43.             IF EsListaVacia(lista) THEN
  44.                 BEGIN
  45.                     new(aux);
  46.                     Asignar(aux^.info,elem);
  47.                     CrearListaVacia(aux^.sig);
  48.                     lista := aux;
  49.                 END {IF}
  50.             ELSE
  51.                 BEGIN
  52.                     IF NOT(Pertenece(lista,elem)) THEN
  53.                         ant := NIL;
  54.                         act := lista;
  55.  
  56.                         WHILE NOT(EsListaVacia(act)) AND ( MayorQue(act^.info,elem)=FALSE ) DO
  57.                             BEGIN
  58.                                 ant := act;
  59.                                 act := act^.sig;
  60.                             END;{WHILE}
  61.  
  62.                         IF act=NIL THEN {Si el bucle llega hasta el final, eso es que el elemento es mayor que el mayor de la lista}
  63.                             InsertarFinal(ant^.sig,elem);
  64.  
  65.                         IF act=lista THEN {Si act=lista eso quiere decir que no ha entrado en el bucle y eso quiere decir que el elemento es más pequeño que el más pequeño de la lista}
  66.                             BEGIN
  67.                                 new(aux);
  68.                                 Asignar(aux^.info,elem);
  69.                                 aux^.sig := lista;
  70.                                 lista := aux;
  71.                             END;{IF}
  72.  
  73.                         IF (ant <> NIL) AND (act <> NIL) THEN
  74.                             BEGIN
  75.                                 new(aux);
  76.                                 Asignar(aux^.info,elem);
  77.                                 aux^.sig := act;
  78.                                 ant^.sig := aux;
  79.                             END;{IF}
  80.                 END; {ELSE}
  81.         END;{Insertar}
  82.  
  83.     PROCEDURE Resto (VAR lista:TListaOrd);
  84.         VAR
  85.             aux:TListaOrd;
  86.         BEGIN
  87.             IF NOT(EsListaVacia(lista)) THEN
  88.                 BEGIN
  89.                     aux := lista;
  90.                     lista := lista^.sig;
  91.                     dispose(aux);
  92.                 END;{IF}
  93.  
  94.         END;{Resto}
  95.  
  96.     FUNCTION EsListaVacia (lista:TListaOrd):boolean;
  97.         BEGIN
  98.             EsListaVacia := (lista = NIL);
  99.         END;{EsListaVacia}
  100.  
  101.     PROCEDURE InsertarFinal (VAR lista:TListaOrd; elem:TElem);
  102.         VAR
  103.             apunt,aux:TListaOrd;
  104.         BEGIN
  105.             IF EsListaVacia(lista) THEN
  106.                 Insertar(lista,elem)
  107.             ELSE
  108.                 BEGIN
  109.                     apunt := lista;
  110.                     WHILE NOT(EsListaVacia(apunt^.sig)) DO
  111.                         BEGIN
  112.                             Avanzar(apunt);
  113.                         END;{WHILE}
  114.                     new(aux);
  115.                     Asignar(aux^.info,elem);
  116.                     aux^.sig := NIL;
  117.                     apunt^.sig := aux;
  118.  
  119.                 END;{Else}
  120.  
  121.         END;{InsertarFinal}
  122.  
  123.     PROCEDURE MostrarLista (lista:TListaOrd);
  124.         BEGIN
  125.             WHILE NOT(EsListaVacia(lista)) DO
  126.                 BEGIN
  127.                     MostrarElem(lista^.info);
  128.                     Avanzar(lista);
  129.                 END;{WHILE}
  130.         END;{MostrarLista}
  131.  
  132.     FUNCTION Pertenece (lista:TListaOrd; elem:TElem):boolean;
  133.         VAR
  134.             check:boolean;
  135.         BEGIN
  136.             check := FALSE;
  137.             IF NOT(EsListaVacia(lista)) THEN
  138.                 BEGIN
  139.  
  140.                     WHILE (NOT(EsListaVacia(lista))) AND ( MayorIgual(lista^.info,elem)=FALSE ) DO
  141.                         BEGIN
  142.                             lista := lista^.sig;;
  143.                         END;{WHILE}
  144.  
  145.                     IF (NOT(EsListaVacia(lista))) THEN
  146.                         IF Iguales(elem,lista^.info) THEN
  147.                             check := TRUE
  148.                         ELSE
  149.                             check := FALSE;
  150.                 END;{IF}
  151.             Pertenece := check;
  152.         END;{Pertenece}
  153.  
  154.     PROCEDURE Avanzar (VAR lista:TListaOrd);
  155.         BEGIN
  156.             lista := lista^.sig;
  157.         END;{Avanzar}
  158.  
  159.     PROCEDURE BorrarLista (VAR lista:TListaOrd);
  160.         BEGIN
  161.             WHILE NOT(EsListaVacia(lista)) DO
  162.                 BEGIN
  163.                     Resto(lista);
  164.                     Avanzar(lista);
  165.                 END;{WHILE}
  166.  
  167.         END;{BorrarLista}
  168.  
  169. END.