1 { algoritmos y programacion II - Catedra Carolo - PRACTICA }
\r\r
2 { PARCIAL 1 1ra Op CUAT 1 2000 }
\r\r
7 IMPLEMENTACION : cola ordenada (cola de prioridades)
\r\r
8 ALMACENAMIENTO : LISTAS
\r\r
9 CARACTERISTICAS: poner ordenado
\r\r
13 { ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular }
\r\r
16 { usa las funciones generales de TDAs }
\r\r
17 uses tda_gral, T_LDC;
\r\r
21 COLAORD_Cola = RECORD
\r\r
22 almac : LDC_Lista;
\r\r
30 PROCEDURE COLAORD_Inicializar ( VAR l: COLAORD_Cola );
\r\r
31 FUNCTION COLAORD_vacia( l: COLAORD_Cola): BOOLEAN;
\r\r
32 FUNCTION COLAORD_llena( l: COLAORD_Cola): BOOLEAN;
\r\r
34 PROCEDURE COLAORD_poner ( VAR l: COLAORD_Cola; e: Tipo_Elem; VAR error: boolean);
\r\r
35 PROCEDURE COLAORD_sacar ( VAR l: COLAORD_Cola; VAR e: Tipo_Elem);
\r\r
36 PROCEDURE COLAORD_vaciar ( VAR l: COLAORD_Cola );
\r\r
37 PROCEDURE COLAORD_copiar ( a: COLAORD_Cola; VAR b: COLAORD_Cola );
\r\r
41 { Estas son los dos procedimientos principales de la aplicación }
\r\r
43 PROCEDURE COLAORD_Inicializar ( VAR l: COLAORD_Cola );
\r\r
45 LDC_Inicializar( l.almac );
\r\r
48 FUNCTION COLAORD_vacia( l: COLAORD_Cola): BOOLEAN;
\r\r
50 COLAORD_vacia := ( LDC_Vacia( l.almac ));
\r\r
53 FUNCTION COLAORD_llena( l: COLAORD_Cola): BOOLEAN;
\r\r
55 COLAORD_llena := LDC_llena( l.almac );
\r\r
58 PROCEDURE COLAORD_poner ( VAR l: COLAORD_Cola; e: Tipo_Elem; VAR error: boolean);
\r\r
60 error_mov : boolean;
\r\r
67 IF LDC_Vacia( l.almac ) THEN
\r\r
68 LDC_insertar( l.almac, LDC_primero, e )
\r\r
70 { recorro para ver si esta duplicado y buscar donde insertarlo }
\r\r
71 LDC_mover_cte( l.almac, LDC_primero, error_mov );
\r\r
72 LDC_elem_cte( l.almac, cte );
\r\r
73 IF devolver_clave_elem( cte ) > devolver_clave_elem( e )
\r\r
74 THEN LDC_insertar( l.almac, LDC_primero, e )
\r\r
75 ELSE IF devolver_clave_elem( cte ) = devolver_clave_elem( e )
\r\r
76 THEN error := true
\r\r
79 LDC_mover_cte( l.almac, LDC_siguiente, error_mov );
\r\r
80 WHILE ( not error ) AND ( not error_mov ) DO BEGIN
\r\r
81 LDC_elem_cte( l.almac, cte );
\r\r
82 IF devolver_clave_elem( cte ) > devolver_clave_elem( e )
\r\r
83 THEN error_mov := true
\r\r
84 ELSE IF devolver_clave_elem( cte ) = devolver_clave_elem( e )
\r\r
85 THEN error := true
\r\r
87 LDC_mover_cte( l.almac, LDC_siguiente, error_mov );
\r\r
94 LDC_mover_cte( l.almac, LDC_primero, error_mov );
\r\r
95 WHILE not error_mov DO BEGIN
\r\r
96 LDC_elem_cte( l.almac, cte );
\r\r
97 IF devolver_clave_elem( cte ) = devolver_clave_elem( ant )
\r\r
99 LDC_insertar( l.almac, LDC_siguiente, e );
\r\r
100 error_mov := true;
\r\r
103 LDC_mover_cte( l.almac, LDC_siguiente, error_mov );
\r\r
112 { pre: no esta vacia }
\r\r
113 PROCEDURE COLAORD_sacar ( VAR l: COLAORD_Cola; VAR e: Tipo_Elem);
\r\r
117 LDC_mover_cte( l.almac, LDC_primero, error );
\r\r
118 LDC_elem_cte( l.almac, e );
\r\r
119 LDC_borrar_cte( l.almac );
\r\r
122 PROCEDURE COLAORD_vaciar ( VAR l: COLAORD_Cola );
\r\r
124 LDC_Vaciar( l.almac );
\r\r
127 { pre: 'a' y 'b' estan creadas y 'b' esta vacia }
\r\r
128 { POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero }
\r\r
129 PROCEDURE COLAORD_copiar ( a : COLAORD_Cola; VAR b : COLAORD_Cola );
\r\r
131 LDC_Copiar( a.almac, b.almac );
\r\r