Advertisement
Guest User

ED - TAD Listas - Enlazada simple versión 4

a guest
Mar 21st, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.77 KB | None | 0 0
  1. UNIT uListaEnlazadaSimple;
  2. INTERFACE
  3.     USES uElementoInteger;
  4.         {PARAMETROS GENERICOS: Funciones Asignar(), SonIguales(), Imprimir() propias de cada tipo de elemento}
  5.     TYPE
  6.         TLista = ^TNodo;
  7.         TNodo = RECORD
  8.             info : TElemento;
  9.             sig : TLista;
  10.         END;
  11.  
  12.     {Constructoras generadoras}
  13.         PROCEDURE CrearVacia(VAR l : TLista);
  14.         PROCEDURE Construir(VAR l : TLista; e : TElemento);
  15.     {Constructoras no generadoras}
  16.         PROCEDURE Concatenar(VAR l : TLista; r : TLista);
  17.         PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
  18.         PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
  19.     {Observadoras selectoras}
  20.         PROCEDURE Primero(l : TLista; VAR e : TElemento);
  21.         PROCEDURE Resto(l : TLista; VAR r : TLista);
  22.     {Observadoras no selectoras}
  23.         FUNCTION EsVacia(l : TLista):boolean;
  24.         FUNCTION Longitud(l : TLista):integer;
  25.         PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
  26.         FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
  27.     {Interacción con el usuario}
  28.         PROCEDURE ImprimirListaCompleta(l : TLista);
  29.  
  30. IMPLEMENTATION
  31. {Constructoras generadoras}
  32.     PROCEDURE CrearVacia(VAR l : TLista);
  33.         BEGIN
  34.             l := NIL;
  35.         END;
  36.     PROCEDURE Construir(VAR l : TLista; e : TElemento);
  37.         VAR
  38.             aux : TLista;
  39.         BEGIN
  40.             new(aux);
  41.             Asignar(aux^.info, e);
  42.             aux^.sig := l;
  43.             l := aux;
  44.         END;
  45.  
  46. {Constructoras no generadoras}
  47.     PROCEDURE Concatenar(VAR l : TLista; r : TLista);
  48.         VAR
  49.             aux : TLista;
  50.         BEGIN
  51.             IF(NOT EsVacia(r)) THEN BEGIN
  52.                 IF (EsVacia(l)) THEN
  53.                     l := r
  54.                 ELSE BEGIN
  55.                     aux := l;
  56.                     WHILE (aux^.sig <> NIL) DO
  57.                         aux := aux^.sig;
  58.                     aux^.sig := r;
  59.                 END;
  60.             END;
  61.         END;
  62.     PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
  63.         VAR
  64.             aux, aux2 : TLista;
  65.             encontrado : boolean;
  66.         BEGIN
  67.             IF NOT EsVacia(l) THEN BEGIN
  68.                 IF(SonIguales(l^.info,e)) THEN BEGIN
  69.                     aux := l^.sig;
  70.                     dispose(l);
  71.                     l := aux;
  72.                 END ELSE BEGIN
  73.                     aux := l;
  74.                     WHILE (aux^.sig <> NIL) DO BEGIN
  75.                         IF(SonIguales(aux^.sig^.info, e)) THEN BEGIN
  76.                             aux2 := aux^.sig;
  77.                             aux^.sig := aux2^.sig;
  78.                             dispose(aux2);
  79.                         END ELSE
  80.                             aux := aux^.sig;
  81.                     END;
  82.                 END;
  83.             END;
  84.         END;
  85.     PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
  86.         VAR
  87.             aux, aux2 : TLista;
  88.         BEGIN
  89.             aux2 := l;
  90.             IF (NOT EsVacia(l)) THEN BEGIN
  91.                 WHILE (aux2^.sig <> NIL) DO BEGIN
  92.                     aux2 := aux2^.sig;
  93.                 END;
  94.                 new(aux);
  95.                 Asignar(aux^.info, e);
  96.                 aux^.sig := NIL;
  97.                 aux2^.sig := aux;
  98.             END ELSE
  99.                 Construir(l, e);
  100.         END;
  101.  
  102. {Observadoras selectoras}
  103.     PROCEDURE Primero(l : TLista; VAR e : TElemento);
  104.         BEGIN
  105.             IF (NOT EsVacia(l)) THEN
  106.                 Asignar(e, l^.info);
  107.         END;
  108.     PROCEDURE Resto(l : TLista; VAR r : TLista);
  109.         BEGIN
  110.             IF (NOT EsVacia(l)) THEN
  111.                 r := l^.sig;
  112.         END;
  113.  
  114. {Observadoras no selectoras}
  115.     FUNCTION EsVacia(l : TLista):boolean;
  116.         BEGIN
  117.             EsVacia := (l = NIL);
  118.         END;
  119.     FUNCTION Longitud(l : TLista):integer;
  120.         VAR
  121.             n : integer;
  122.         BEGIN
  123.             n := 0;
  124.             WHILE (l <> NIL) DO BEGIN
  125.                 n := n + 1;
  126.                 l := l^.sig;
  127.             END;
  128.             Longitud := n;
  129.         END;
  130.     PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
  131.         BEGIN
  132.             IF (NOT EsVacia(l)) THEN BEGIN
  133.                 WHILE (l^.sig <> NIL) DO BEGIN
  134.                     l := l^.sig;
  135.                 END;
  136.                 Asignar(e, l^.info);
  137.             END;
  138.         END;
  139.     FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
  140.         VAR
  141.             encontrado : boolean;
  142.         BEGIN
  143.             encontrado := FALSE;
  144.             WHILE ((l <> NIL) AND (NOT encontrado)) DO BEGIN
  145.                 IF (SonIguales(l^.info, e)) THEN
  146.                     encontrado := TRUE
  147.                 ELSE
  148.                     l := l^.sig;
  149.             END;
  150.             Pertenece := encontrado;
  151.         END;
  152.  
  153. {Interacción con el usuario}
  154.     PROCEDURE ImprimirListaCompleta(l : TLista);
  155.         BEGIN
  156.             write('[');
  157.             WHILE (l <> NIL) DO BEGIN
  158.                 Imprimir(l^.info);
  159.                 write(', ');
  160.                 l := l^.sig;
  161.             END;
  162.             writeln(']');
  163.         END;
  164. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement