Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. UNIT uListaDin;
  2.  
  3.     INTERFACE
  4.         USES uElem;
  5.         TYPE
  6.             TLista = ^TNodo;
  7.  
  8.             TNodo = RECORD
  9.                 info : TElemento;
  10.                 sig : TLista;
  11.             END; {TNodo}
  12.  
  13.         PROCEDURE CrearLista (VAR listaSP:TLista);
  14.  
  15.  
  16.         FUNCTION ListaVacia (listaSP:TLista):boolean;
  17.  
  18.  
  19.         PROCEDURE ConstruirLista (VAR listaSP:TLista; elementoSP:TElemento);
  20.  
  21.  
  22.         PROCEDURE Cabecera (listaSP:TLista; VAR cabeza:TElemento);
  23.  
  24.  
  25.         PROCEDURE Resto (VAR listaSP:TLista);
  26.  
  27.  
  28.         FUNCTION Longitud (listaSP:TLista):integer;
  29.  
  30.  
  31.         FUNCTION Pertenece (listaSP:TLista; elementoSP:TElemento):boolean;
  32.  
  33.  
  34.         PROCEDURE Concatenar (VAR listaSP1:TLista; listaSP2:TLista);
  35.  
  36.  
  37.         PROCEDURE BorrarElemento (VAR listaSP:TLista; elementoSP:TElemento);
  38.  
  39.  
  40.         PROCEDURE InsertarFinal (VAR listaSP:TLista; elementoSP:TElemento);
  41.  
  42.  
  43.         PROCEDURE Ultimo (listaSP:TLista; VAR ultSP:TElemento);
  44.  
  45.  
  46.         PROCEDURE EscribirLista (listaSP:TLista);
  47.  
  48.     IMPLEMENTATION
  49.  
  50.         PROCEDURE CrearLista (VAR listaSP:TLista);
  51.             BEGIN
  52.                 listaSP := NIL;
  53.             END;{CrearLista}
  54.  
  55.         FUNCTION ListaVacia (listaSP:TLista):boolean;
  56.             BEGIN
  57.                 ListaVacia := (listaSP = NIL);
  58.             END;{ListaVacia}
  59.  
  60.         PROCEDURE ConstruirLista (VAR listaSP:TLista; elementoSP:TElemento);
  61.             VAR
  62.                 aux : TLista;
  63.             BEGIN
  64.                 new(aux);
  65.                 Asignar(aux^.info,elementoSP);
  66.                 aux^.sig := listaSP;
  67.                 listaSP := aux;
  68.             END;{ConstruirLista}
  69.  
  70.         PROCEDURE Cabecera (listaSP:TLista; VAR cabeza:TElemento);
  71.             BEGIN
  72.                 Asignar(cabeza , listaSP^.info);
  73.             END;{Cabecera}
  74.  
  75.         PROCEDURE Resto (VAR listaSP:TLista);
  76.             VAR
  77.                 aux : TLista;
  78.             BEGIN
  79.                 IF listaSP<>NIL THEN
  80.                     BEGIN
  81.                         aux := listaSP;
  82.                         listaSP := listaSP^.sig;
  83.                         dispose(listaSP);
  84.                         listaSP := aux;
  85.                     END;{IF}
  86.             END;{Resto}
  87.  
  88.         FUNCTION Longitud (listaSP:TLista):integer;
  89.             VAR
  90.                 i:integer;
  91.             BEGIN
  92.                 IF listaSP = NIL THEN
  93.                     Longitud := 0
  94.                 ELSE
  95.                     i := 0;
  96.                     WHILE listaSP <> NIL DO
  97.                         BEGIN
  98.                             i := succ(i);
  99.                             listaSP := listaSP^.sig;
  100.                         END;{WHILE}
  101.  
  102.                 Longitud := i;
  103.             END;{Longitud}
  104.  
  105.         FUNCTION Pertenece (listaSP:TLista; elementoSP:TElemento):boolean;
  106.             VAR
  107.                 check:boolean;
  108.             BEGIN
  109.                 check := FALSE;
  110.  
  111.                 WHILE (listaSP<>NIL) AND (check=FALSE) DO
  112.                     BEGIN
  113.                         check := Igual(listaSP^.info , elementoSP);
  114.                         listaSP := listaSP^.sig;
  115.                     END;
  116.  
  117.                 Pertenece := check;
  118.             END;{Pertenece}
  119.  
  120.         PROCEDURE Concatenar (VAR listaSP1:TLista; listaSP2:TLista); {Concatena, a la listaSP1, la lista SP2}
  121.                 VAR
  122.                     aux:TLista;
  123.                 BEGIN
  124.  
  125.                     IF listaSP1<>NIL THEN
  126.                         BEGIN
  127.                             aux := listaSP1;
  128.  
  129.                             WHILE aux^.sig<>NIL DO
  130.                                 aux := aux^.sig;
  131.  
  132.  
  133.                             aux^.sig := listaSP2;
  134.                         END
  135.                     ELSE
  136.                         listaSP1 := listaSP2; {Si listaSP1 es vacĂ­a, listaSP1 es igual a listaSP2}
  137.  
  138.  
  139.                 END;{Concatenar}
  140.  
  141.         PROCEDURE BorrarElemento (VAR listaSP:TLista; elementoSP:TElemento);
  142.             VAR
  143.                 act,ant:TLista;
  144.             BEGIN
  145.                 ant := NIL;
  146.                 act := listaSP;
  147.  
  148.                 WHILE (act<>NIL) AND (listaSP^.info<>elementoSP) DO
  149.                     BEGIN
  150.                         ant := act;
  151.                         act := act^.sig;
  152.                     END;{WHILE}
  153.  
  154.                 IF (act<>NIL) THEN
  155.                     IF (ant = NIL) THEN
  156.                         Resto(listaSP)
  157.                     ELSE
  158.                         BEGIN
  159.                             ant^.sig := act^.sig;
  160.                             dispose(act);
  161.                         END;{ELSE}
  162.  
  163.             END;{BorrarElemento}
  164.  
  165.         PROCEDURE InsertarFinal (VAR listaSP:TLista; elementoSP:TElemento);
  166.             VAR
  167.                 aux2,aux:TLista;
  168.             BEGIN
  169.                 IF listaSP=NIL THEN
  170.                     ConstruirLista(listaSP,elementoSP)
  171.                 ELSE
  172.                     BEGIN
  173.                         aux2:=listaSP;
  174.                         new(aux);
  175.                         Asignar(aux^.info,elementoSP);
  176.                         aux^.sig := NIL;
  177.                         WHILE aux2^.sig<>NIL DO
  178.                             aux2 := aux2^.sig;
  179.                         aux2^.sig := aux;
  180.                     END;
  181.             END;{InsertarFinal}
  182.  
  183.         PROCEDURE Ultimo (listaSP:TLista; VAR ultSP:TElemento);
  184.  
  185.             BEGIN
  186.                 IF listaSP<>NIL THEN
  187.                     BEGIN
  188.  
  189.                         WHILE listaSP^.sig<>NIL DO
  190.                             listaSP := listaSP^.sig;
  191.  
  192.                         Asignar(ultSP , listaSP^.info);
  193.  
  194.                     END;
  195.  
  196.             END;{Ultimo}
  197.  
  198.         PROCEDURE EscribirLista (listaSP:TLista);
  199.             BEGIN
  200.                 WHILE listaSP<>NIL DO
  201.                     BEGIN
  202.                         writeln(listaSP^.info);
  203.                         listaSP := listaSP^.sig;
  204.                     END;{WHILE}
  205.             END;{EscribirLista}
  206.  
  207.  
  208. END.