Duda implementación TAD Pila
Publicado por Sergio (11 intervenciones) el 19/04/2014 00:56:23
Buenas a todos. Escribo porque tengo una duda a la hora de implementar el TAD Pila en Pascal. Exactamente, el problema lo tengo a la hora de copiar una pila. Debo realizar una copia exacta de una pila recibida, y éste es el código que consideraba correcto para ello:
Lo que intento con ello es ir sacando elemento a elemento de la pila recibida, insertarlos en una pila auxiliar (quedando así una copia de la pila, pero invertida) y volver a realizar el mismo proceso para que en la pila destino quede una copia exacta de la pila origen.
No puedo cambiar la cabecera del subprograma, pues debo implementar la unidad en base a una interfaz dada (también la dejo por aquí):
Muchas gracias de antemano
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PROCEDURE Copiar (VAR destino: TPila; origen: TPila);
VAR
e,e2:TInfo;
aux:TPila;
BEGIN
IF EsPilaVacia(origen) THEN
CrearPilaVacia(destino)
ELSE
BEGIN
CrearPilaVacia(aux);
WHILE NOT EsListaVacia(origen) DO
BEGIN
Cima(origen,e);
Apilar(aux,e);
Desapilar(origen);
END;
CrearPilaVacia(destino);
WHILE NOT EsListaVacia(aux)DO
BEGIN
Cima(aux,e2);
Apilar(destino,e2);
Desapilar(aux);
END;
END;
END;
No puedo cambiar la cabecera del subprograma, pues debo implementar la unidad en base a una interfaz dada (también la dejo por aquí):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PROCEDURE CrearPilaVacia(VAR p: TPila);{O(?)}
{Pre = TRUE}
{Post = devuelve la pila vacía}
PROCEDURE Apilar(VAR p: TPila; e: TInfo);{O(?)}
{Pre = recibe una pila que puede ser vacía o no}
{Post = devu1elve la pila con el elemento e en la cima}
{Observadoras selectoras}
PROCEDURE Cima(p: TPila; VAR e: TInfo);{O(?)}
{Pre = Recibe la pila no vacía}
{Post = devuelve el primer elemento de la pila}
PROCEDURE Desapilar(VAR p: TPila);{O(?)}
{Pre = recibe una pila no vacía}
{Post = devuelve una pila sin el primer elemento de la original}
{Observadoras no selectoras}
FUNCTION EsPilaVacia(p: TPila): BOOLEAN;{O(?)}
{Pre = recibe una pila que puede ser vacía o no}
{Post = devuelve TRUE si la pila es vacía, FALSE en caso contrario}
PROCEDURE Copiar (VAR destino: TPila; origen: TPila);
{Pre = la variable origen es una pila creada, vacía o con elementos}
{Post = la variable destino es una copia exacta de la pila origen}
FUNCTION Iguales(p1, p2: TPila): Boolean;
{Pre = TRUE}
{Post = devuelve TRUE si las dos pilas son iguales}
PROCEDURE Destruir (VAR pila: TPila);
{Pre = TRUE}
{Post = libera la memoria utilizada y devuelve la pila vacía}
Muchas gracias de antemano
Valora esta pregunta


0