Advertisement
diegoguerrero

ED - TAD Lista - Enlazada simple v. 2

Mar 4th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.16 KB | None | 0 0
  1. UNIT uListaEnlazadaSimple;
  2. INTERFACE
  3.     USES uElemento;
  4.         {PARAMETROS GENERICOS: Funciones Asignar() y SonIguales() 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(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.  
  28. IMPLEMENTATION
  29. {Constructoras generadoras}
  30.     PROCEDURE CrearVacia(VAR l : TLista);
  31.         BEGIN
  32.             l := NIL;
  33.         END;
  34.     PROCEDURE Construir(VAR l : TLista; e : TElemento);
  35.         VAR
  36.             aux : TLista;
  37.         BEGIN
  38.             new(aux);
  39.             Asignar(aux^.info, e);
  40.             aux^.sig := l;
  41.             l := aux;
  42.         END;
  43.  
  44. {Constructoras no generadoras}
  45.     PROCEDURE Concatenar(VAR l : TLista; r : TLista);
  46.         VAR
  47.             aux : TLista;
  48.         BEGIN
  49.             IF(NOT EsVacia(r)) THEN BEGIN
  50.                 aux := l;
  51.                 WHILE (aux^.sig <> NIL) DO
  52.                     aux := aux^.sig;
  53.                 aux^.sig := r;
  54.             END;
  55.         END;
  56.     PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
  57.         VAR
  58.             aux, aux2 : TLista;
  59.         BEGIN
  60.             aux := l;
  61.             aux2 := l;
  62.             IF (NOT EsVacia(l)) THEN
  63.                 WHILE (aux <> NIL) DO BEGIN
  64.                     IF (SonIguales(aux^.info, e)) THEN BEGIN
  65.                         aux2^.sig := aux^.sig;
  66.                         dispose(aux);
  67.                     END;
  68.                     aux2 := aux;
  69.                     aux := aux^.sig;
  70.                 END;
  71.         END;
  72.     PROCEDURE InsertarFinal(l : TLista; e : TElemento);
  73.         VAR
  74.             aux : TLista;
  75.         BEGIN
  76.             IF (NOT EsVacia(l)) THEN BEGIN
  77.                 WHILE (l^.sig <> NIL) DO BEGIN
  78.                     l := l^.sig;
  79.                 END;
  80.                 new(aux);
  81.                 aux^.info := e;
  82.                 aux^.sig := NIL;
  83.                 l^.sig := aux;
  84.             END ELSE
  85.                 Construir(l, e);
  86.         END;
  87.  
  88. {Observadoras selectoras}
  89.     PROCEDURE Primero(l : TLista; VAR e : TElemento);
  90.         BEGIN
  91.             IF (NOT EsVacia(l)) THEN
  92.                 Asignar(e, l^.info);
  93.         END;
  94.     PROCEDURE Resto(l : TLista; VAR r : TLista);
  95.         BEGIN
  96.             IF (NOT EsVacia(l)) THEN
  97.                 r := l^.sig;
  98.         END;
  99.  
  100. {Observadoras no selectoras}
  101.     FUNCTION EsVacia(l : TLista):boolean;
  102.         BEGIN
  103.             EsVacia := (l = NIL);
  104.         END;
  105.     FUNCTION Longitud(l : TLista):integer;
  106.         VAR
  107.             n : integer;
  108.         BEGIN
  109.             n := 0;
  110.             WHILE (l <> NIL) DO BEGIN
  111.                 n := n + 1;
  112.                 l := l^.sig;
  113.             END;
  114.             Longitud := n;
  115.         END;
  116.     PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
  117.         BEGIN
  118.             IF (NOT EsVacia(l)) THEN BEGIN
  119.                 WHILE (l^.sig <> NIL) DO BEGIN
  120.                     l := l^.sig;
  121.                 END;
  122.                 Asignar(e, l^.info);
  123.             END;
  124.         END;
  125.     FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
  126.         VAR
  127.             encontrado : boolean;
  128.         BEGIN
  129.             encontrado := FALSE;
  130.             WHILE ((l <> NIL) AND (NOT encontrado)) DO BEGIN
  131.                 IF (SonIguales(l^.info, e)) THEN
  132.                     encontrado := TRUE
  133.                 ELSE
  134.                     l := l^.sig;
  135.             END;
  136.             Pertenece := encontrado;
  137.         END;
  138. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement