Advertisement
diegoguerrero

ED - TAD Lista - Doblemente enlazada v. 1

Mar 15th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.72 KB | None | 0 0
  1. UNIT uListaDoblementeEnlazada;
  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, ant : 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.             aux^.ant := NIL;
  44.             aux^.sig^.ant := aux;
  45.             l := aux;
  46.         END;
  47.  
  48. {Constructoras no generadoras}
  49.     PROCEDURE Concatenar(VAR l : TLista; r : TLista);
  50.         VAR
  51.             aux : TLista;
  52.         BEGIN
  53.             IF(NOT EsVacia(r)) THEN BEGIN
  54.                 aux := l;
  55.                 WHILE (aux^.sig <> NIL) DO
  56.                     aux := aux^.sig;
  57.                 aux^.sig := r;
  58.                 aux^.sig^.ant := aux;
  59.             END;
  60.         END;
  61.     PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
  62.         VAR
  63.             aux : TLista;
  64.         BEGIN
  65.             IF (NOT EsVacia(l)) THEN
  66.                 aux := l;
  67.                 WHILE (aux <> NIL) DO BEGIN
  68.                     IF (SonIguales(aux^.info, e)) THEN BEGIN
  69.                         aux^.sig^.ant := aux^.ant;
  70.                         aux^.ant^.sig := aux^.sig;
  71.                         dispose(aux);
  72.                     END ELSE
  73.                         aux := aux^.sig;
  74.                 END;
  75.         END;
  76.     PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
  77.         VAR
  78.             aux, aux2 : TLista;
  79.         BEGIN
  80.             aux := l;
  81.             IF (NOT EsVacia(l)) THEN BEGIN
  82.                 WHILE (aux^.sig <> NIL) DO BEGIN
  83.                     aux := aux^.sig;
  84.                 END;
  85.                 new(aux2);
  86.                 Asignar(aux2^.info, e);
  87.                 aux^.sig := aux2;
  88.                 aux2^.ant := aux;
  89.                 aux2^.sig := NIL;
  90.             END ELSE
  91.                 Construir(l, e);
  92.         END;
  93.  
  94. {Observadoras selectoras}
  95.     PROCEDURE Primero(l : TLista; VAR e : TElemento);
  96.         BEGIN
  97.             IF (NOT EsVacia(l)) THEN
  98.                 Asignar(e, l^.info);
  99.         END;
  100.     PROCEDURE Resto(l : TLista; VAR r : TLista);
  101.         BEGIN
  102.             IF (NOT EsVacia(l)) THEN
  103.                 r := l^.sig;
  104.         END;
  105.  
  106. {Observadoras no selectoras}
  107.     FUNCTION EsVacia(l : TLista):boolean;
  108.         BEGIN
  109.             EsVacia := (l = NIL);
  110.         END;
  111.     FUNCTION Longitud(l : TLista):integer;
  112.         VAR
  113.             n : integer;
  114.         BEGIN
  115.             n := 0;
  116.             WHILE (l <> NIL) DO BEGIN
  117.                 n := n + 1;
  118.                 l := l^.sig;
  119.             END;
  120.             Longitud := n;
  121.         END;
  122.     PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
  123.         BEGIN
  124.             IF (NOT EsVacia(l)) THEN BEGIN
  125.                 WHILE (l^.sig <> NIL) DO BEGIN
  126.                     l := l^.sig;
  127.                 END;
  128.                 Asignar(e, l^.info);
  129.             END;
  130.         END;
  131.     FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
  132.         VAR
  133.             encontrado : boolean;
  134.         BEGIN
  135.             encontrado := FALSE;
  136.             WHILE ((l <> NIL) AND (NOT encontrado)) DO BEGIN
  137.                 IF (SonIguales(l^.info, e)) THEN
  138.                     encontrado := TRUE
  139.                 ELSE
  140.                     l := l^.sig;
  141.             END;
  142.             Pertenece := encontrado;
  143.         END;
  144.  
  145. {Interacción con el usuario}
  146.     PROCEDURE ImprimirListaCompleta(l : TLista);
  147.         BEGIN
  148.             WHILE (l <> NIL) DO BEGIN
  149.                 Imprimir(l^.info);
  150.                 l := l^.sig;
  151.                 writeln();
  152.             END;
  153.         END;
  154. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement