Advertisement
diegoguerrero

ED - TAD Lista - Doblemente enlazada (^ini y ^fin) v. 1

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