manejo de colas (listas enlazada circular)
pascal:
program colas_lista_enlazada_circular;
Type
tCola = ^nodo;
nodo = Record
clave : Integer;
sig : tCola;
End;
Procedure Crear(Var c1 : tcola);
begin
c1 := NIL
End;
Function Vacia(c1 : tcola) : Boolean;
Begin
Vacia := c1 = NIL
End;
Procedure Encolar(Var c1 : tcola; elem : Integer);
Var
nuevo : tcola;
begin
new(nuevo);
nuevo^.clave := elem;
if c1 = NIL then
nuevo^.sig := nuevo
else begin
nuevo^.sig := c1^.sig;
c1^.sig := nuevo
end;
c1 := nuevo
end;
Procedure Desencolar(Var c1 : tcola; Var elem : Integer);
Var
nuevo : tcola;
Begin
elem := c1^.sig^.clave;
if c1 = c1^.sig then begin
dispose(c1);
c1 := NIL
end
else begin
nuevo := c1^.sig;
c1^.sig := nuevo^.sig;
dispose(nuevo)
end
end;
{ Programa de prueba }
Var
cola : tcola;
elem : Integer;
begin
crear(cola);
if (vacia(cola)) then writeln('Cola vacia');
encolar(cola, 3);
desencolar(cola, elem)
end.
Type
tCola = ^nodo;
nodo = Record
clave : Integer;
sig : tCola;
End;
Procedure Crear(Var c1 : tcola);
begin
c1 := NIL
End;
Function Vacia(c1 : tcola) : Boolean;
Begin
Vacia := c1 = NIL
End;
Procedure Encolar(Var c1 : tcola; elem : Integer);
Var
nuevo : tcola;
begin
new(nuevo);
nuevo^.clave := elem;
if c1 = NIL then
nuevo^.sig := nuevo
else begin
nuevo^.sig := c1^.sig;
c1^.sig := nuevo
end;
c1 := nuevo
end;
Procedure Desencolar(Var c1 : tcola; Var elem : Integer);
Var
nuevo : tcola;
Begin
elem := c1^.sig^.clave;
if c1 = c1^.sig then begin
dispose(c1);
c1 := NIL
end
else begin
nuevo := c1^.sig;
c1^.sig := nuevo^.sig;
dispose(nuevo)
end
end;
{ Programa de prueba }
Var
cola : tcola;
elem : Integer;
begin
crear(cola);
if (vacia(cola)) then writeln('Cola vacia');
encolar(cola, 3);
desencolar(cola, elem)
end.