Escolar Documentos
Profissional Documentos
Cultura Documentos
Quiroga - 2002
Ctedra: Estructuras de Datos Libro: ESTRUCTURA DE D ATOS. Referencia prctica con orientacin a objetos. Romn Martnez, Elda Quiroga Inst. Tecnolgico y de Estudios Superiores de Monterrey. Campus Monterrey. Ed. Thomsan Learning. - 2002 - ISBN 970-686-044-4 Bibliografa de la clases 7 y 8 Unidad 2: Estructuras de Datos Lineales
Qu es una pila?
Una pila es un conjunto ordenado de objetos los cuajes pueden obtenerse (uno a la vez) siguiendo un orden especial; el ltimo que entr en la pila es el primero en salir (figura 6.1). As, en una cafetera de autoservicio se tienen apiladas las charolas que emplearn los clientes y cada uno toma la que se encuentra hasta arriba (en el tope) y la ltima charola que se toma es precisamente la primera que se coloc en la pila. De la misma manera, se puede tener una pila de libros, una pila de ladrillos, una bolsa de pan de caja, etctera.
Figura 6.1
La pila es una estructura finita. Los elementos pueden identificarse por la posicin en que estn; el ltimo elemento de la pila se encuentra en el tope, enseguida est el otro, y as sucesivamente. Para llegar al objeto del fondo, es necesario obtener primero los que le anteceden. Por consiguiente, siempre se deber tener en cuenta donde se encuentra el ltimo elemento aadido, es decir, el tope de la pila.
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
Figura 6.2
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
El diseo de las operaciones es lo que realmente distingue a los TDA pila y fila. Sin embargo, las operaciones que se disearn sern las mismas para ambos. Adicionalmente, se podr observar que puede haber diversos di seos para las operaciones, dependiendo del enfoque del diseador lgico. En este caso, se presentan dos opciones de diseo que permiten ejemplificar y razonar el impacto en la abstraccin de datos.
Diseo 1 para las operaciones del TDA pila METER (PUSH) UTILIDAD: agrega un elemento a una pila. ENTRADAS: la pila a la que se va a agregar el elemento y el elemento que se agregar. SALIDAS: la pila con un elemento ms. PRECONDICIN: la pila est creada y no est llena. POSTCONDICIN: la pila queda con un elemento adicional, agregado por el extremo del tope de la pila. SACAR (POP) UTILIDAD: elimina el ltimo elemento que se agreg a la pila. ENTRADAS: la pila a la que se va a quitar un elemento. SALIDAS: la pila con un elemento menos y el elemento que se elimin. PRECONDICIN: la pila est creada y no est vaca. POSTCONDICIN: la pila queda con un elemento menos, eliminado por el extremo del tope de la pila.
Ya que en estas operaciones se ha puesto como precondicin la verificacin del estado de pila (vaca o llena), es necesario disear operaciones que permitan al usuario de la pila hacer validaciones. Por lo tanto se disean estas operaciones.
VACA UTILIDAD: verifica si una determinada pila est vaca o no. ENTRADAS: la pila que se va a verificar. SALIDAS: valor booleano que indique si la pila est vaca o no. PRECONDICIN: la pila por verificar existe. POSTCONDICIN: ninguna, la estructura no se modifica LLENA UTILIDAD: verifica si una pila determinada se encuentra llena o no ENTRADAS: la pila que se va a verificar. SALIDAS: valor booleano que indique si la pila est llena o no, PRECONDICIN: la pila por verificar existe. POSTCONDICIN: ninguna, la estructura no se modifica.
Si se analiza un poco, el TDA fila contendra en forma equivalente las mismas operaciones, pero considerando en las postcondiciones los cambios de acuerdo con el manejo del orden de entrada en una Fila. A continuacin, se detalla este mismo diseo para un TDA fila.
Diseo 1 para las operaciones del TDA fila METER (INSERT) UTILIDAD: agrega un elemento a una fila. ENTRADAS: la fila a la que se agregar el elemento y el elemento por agregar. SALIDAS: la fila con un elemento adicional. PRECONDICION: la fila est creada y no est llena. POSTCONDICION: la fila queda con un elemento adicional, agregado por el extremo del final de la fila. SACAR (REMOVE) UTILIDAD: elimina el ltimo elemento que se agreg a una fila. ENTRADAS: la fila a la que se va a quitar un elemento. SALIDAS: la fila con un elemento menos y el elemento que se elimin. PRECONDICION: la fila est creada y no est vaca. POSTCONDICION: la fila queda con un elemento menos, eliminado por el extremo del frente de la fila.
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
VACA UTILIDAD: verifica si una determinada fila se encuentra vaca o no. ENTRADAS: la fila que se va a verificar SALIDAS: valor booleano que indique si la fila est vaca o no. PRECONDICION: la fila por verificar existe. POSTCONDICION: ninguna, la estructura no se modifica. LLENA UTILIDAD: verifico si una fila determinada se encuentra llena o no. ENTRADAS: la fila que se va a verificar. SALIDAS: valor booleano que indique si la fila est llena o no. PRECONDICION: la fila por verificar existe. POSTCONDICION: ninguna, la estructura no se modifica.
Es importante darse cuenta en este momento que, sin saber cmo se implementar fsicamente la pila o la fila, se pueden disear las operaciones en un nivel abstracto. Adelantando un poco el nivel fsico o de implementacin, se puede observar que la especificacin de las operaciones puede determinar la interfaz que tendrn los mdulos de las operaciones. Por ejemplo, si el TDA pila fuera a ser implementado con este diseo en el lenguaje C++, es posible bosquejar el diseo de la clase pila de la siguiente manera:
class Pila { private: // atributos segn representacin fsica del TDA public: Pila(); // constructor que inicializa como vaca void Meter (Tipoelem dato); Tipeelem Sacar(); char Llenar(); char Vacia(); ~Pila(); // destructor si se requiere };
Ahora bien, si se eliminan las precondicioncs que indican que las estructuras no deben estar vacas o llenas, estas condiciones se pueden validar fsicamente en las operaciones METER y SACAR, lo que nos lleva a plantear otro diseo lgico, cuya consecuencia es proveer mayor comodidad al usuario de los TDA, y ya no sern necesarias las operaciones LLENA y VACIA. A continuacin se detalla este diseo slo para el TDA pila, del cual se deduce fcilmente el TDA fila.
Diseo 2 para las operaciones del TDA pila METER (PUSH) UTILIDAD: agrega un elemento a una pila si no est llena. ENTRADAS: la pila a la que se va a agregar el elemento y el elemento que se agregar. SALIDAS: la pila con un elemento adicional, si se pudo agregar, o la pila como estaba. Adems, la operacin genera como salida un valor booleano que indica si se pudo o no agregar el elemento, PRECONDICION: ninguna. POSTCONDICION: la pila queda con un elemento adicional por el extremo del tope si se pudo agregar o se queda como estaba por encontrarte llena. SACAR (POP) UTILIDAD: elimina el ltimo elemento que se agreg a una pila, si es que no esta vaca. ENTRADAS: la pila a la que se va a quitar un elemento. SALIDAS: la pila con un elemento menos, si se pudo quitar y el elemento eliminado o la pila como estaba. Adems, la operacin que se realiza genera como salida un valor booleano que indica si se pudo o no eliminar el elemento. PRECONDICION: ninguna. POSTCONDICION: la pila queda con un elemento menos, si se pudo quitar (eliminado por el tope) o queda como estaba en caso de encontrarse vaca.
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
Ejemplo
Caso de aplicacin
Este es el momento para ilustrar el concepto y los beneficios de la abstraccin de datos, en la que se debe cumplir la independencia entre los niveles de aplicacin e implantacin (fsico). El problema consiste en verificar si una frase es o no palndromo, esto es, si se lee igual de izquierda a derecha, quede derecha a izquierda. Por ejemplo: ANITALAVALATINA. Aunque la solucin de este problema puede obtenerse de muchas maneras, se puede observar que una pila y una fila pueden ser tiles planteando el siguiente algoritmo: 1. Cada letra que se lea de la frase se deber meter en una pila y en una fila. 2. Saque un dato de la pila y de la fila. Si son iguales, repita el paso 2. Si son diferentes, termine el proceso indicando que no es palndromo. 3. Si la pila y la lila se vaciaron, es palndromo. Observe que, sin haber implantado los TDA pila y fila, se puede desarrollar una aplicacin solamente conociendo la interfaz de las operaciones en el lenguaje correspondiente. Esto se demostrar tambin en trminos de la implantacin en un lenguaje de programacin y, por lo tanto, supondremos que se han planteado las siguientes definiciones en C++:
Implementacin parcial del TDA Pila, segn el diseo lgico 2 class Pila { private: // atributos segn // representacin del TDA public: Pila(); // constructor que // inicializa como vaca char Meter(Tipoelem dato); char Sacar(Tipoelem* dato); ~Pila(); // destructor }; Implementacin parcial del TDA Fila, segn el diseo lgico 1 class Fila { private: // atributos segn // representacin del TDA public: Fila(); // constructor que // inicializa como vaca void Meter (Tipoelem dato); Tipeelem Sacar(); char Llenar(); char Vacia(); ~Fila(); // destructor };
La implementacin de la aplicacin se puede realizar de la siguiente manera, sin necesidad de conocer cmo estn implement ados los TDA, lo que cumple con la independencia de niveles durante la abstraccin de datos:
char palindrome() { Pila P; Fila F; Tipoelem dato; // define F como referencia a un objeto de tipo Pila // define F como referencia a un objeto de tipo Fila // definicin del tipo de datos del carcter de la frase
cin.get(dato) //ingreso por consola del 1er carcter de la frase While (dato != \n) // Mientras el recorrido de la frase no termine, hace: { P.Meter(dato) // Inserta carcter de frase en Pila F.Meter(dato) // Inserta carcter de frase en Fila cin.get(dato); } // Ingresa por consola del siguiente carcter de la frase While (P.sacar(dato)) // if (F.sacar()!= dato) return 0; return 1; // }; Mientras existan elementos para sacar en la Pila, hacer: // Si el elemento sacado de la Pila NO es igual al // elemento sacado de la Fila retornar 0=Fracaso Si ya no retorno 0=fracaso, retornar 1=xito.
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
ejemplificaremos las dos situaciones ms tpicas de implementacin y se dejarn como ejercicio otras posibilidades.
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
arreglo, cada vez que se saca un dato. As, esta representacin elimina el problema de los corrimientos, pero podra llegar al caso extremo en que se desperdicien localidades de memoria, pues cuando el indicador del final de la fila est en la posicin mxima del arreglo, ya no podrn agregarse elementos a la fila, aunque se tengan lugares disponibles.
Es importante observar que esta representacin no tiene las desventajas de las anteriores, pues no se requiere recorrer datos ni se desperdi cia espacio en el arreglo al considerar todas las localidades disponibles en l. Sin embargo, puesto que un arreglo en la memoria no es fsicamente circular, el implementador de las operaciones tendr que controlar esta caracterstica. Antes de conocer el cdigo de implementacin para esta representacin, es importante considerar que los dos apuntadores (frente y final) siempre se incrementarn dentro del arreglo. Esto quiere decir que, para agregar un dato, se incrementa el final, y para sacar, se incrementa el frente. En la accin de incrementar se tendr que considerar la circularidad del ar reglo y se puede deducir que el incremento se validar con una estructura de decisin que verifique si se est en la ltima posicin del arreglo para mandar a la posicin inicial, o si no, incrementar normalmente. Sin embargo, aqu vale la pena presentar un truco de programacin que permite hacer ms eficiente la accin de incrementar circularmente. Esto se logra con el operador que permite obtener el residuo de una divisin entera. Para el caso del lenguaje C++ (o C), la equivalencia sera la de la figura 6.4, y se puede comprobar (donde MAX es el tamao del arreglo):
if (ap == MAX-1) ap = 0; else ap++;
Figura 64.
ap = [ap+1] % MAX;
Por lo tanto, la implementacin final del TDA fila, con esta representacin y con el diseo lgico 1, sera la siguiente:
class Fila { private: tipoelem datos[MAX]; int Frente, Final; public: Fila() {Frente = Final = 1:} void Meter(tipoelem dato); tipoelem Sacar (); char Llena(); char Vacia(); };
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
void Fila::Meter(tipoelem nuevo) { Final = (Final + 1) % MAX; datos[Final] = nuevo; if(Frente == 1) Frente = 0; } tipoelem Fila::Sacar() { tipoelem valor = datos[Frente]; if(Frente == Final) Frente = Final = 1; else Frente = (Frente + 1) % MAX; return valor; } char Vacia ( ) { return (Frente == 1); } char Llena ( ) { return ((Final + 1) % MAX) == Frente ); }
A continuacin, se muestra la implementacin con esta representacin y en el diseo 2 del TDA fila:
class Fila ( private: Nodo *Frente, *Final: public: Fila(); // constructor que inicializa como vaca char Meter(tipoelem dato); char Sacar (tipoelem* dato); ~Fila(); // destructor necesario }; Fila::Fila() { Frente = Final = NULL; } Fila::~Fila() { Nodo *aux = Frente; while (Frente != NULL) { Frente = aux->sig: delete aux; ata = Frente; } }
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
char Fila::Meter(tipoelem nuevo) { Nodo *aux = new Nodo: if (aux == NULL) return 0; else { aux->info = nuevo; if (Final == NULL) Frente == aux: else Final->sig = aux; Final = aux; return 1; } } char Fila::Sacar(tipoelem * valor) { Nodo *aux = Frente; if(aux == NULL) return 0; else { valor = aux->info; Frente = aux->sig; delete aux; if(Frente == NULL) Final = NULL; return 1; } }
Ejercicios
1. Para cada una de las siguientes formas de representacin fsica de una pila, impleme nte las operaciones segn la especificacin lgica del diseo 1 para el TDA pila, suponiendo que cada operacin ser un mtodo de la clase que representa a las pilas. a) Memoria esttica: se utiliza un arreglo unidimensional y un apuntador TOPE que indique el lugar del arreglo donde estar el siguiente elemento por aadir en la pila. Los elementos se guardan desde la primera posicin hasta la ltima del arreglo. b) Memoria esttica: se utiliza un arreglo unidimensional y un apuntador TOPE que indique la po sicin del ltimo elemento aadido a la pila. Los elementos se guardan comenzando en la ltima posicin hasta la primera del arreglo. c) Memoria esttica: se utiliza un arreglo unidimensional en que la primera posicin indicar dnde estar el siguiente e lemento por aadir en la pila. Los elementos se guardan desde la segunda posicin del arreglo hasta la ltima. Obviamente, esta representacin slo sirve para pilas que guardan nmeros enteros. d) Memoria dinmica: se utiliza una lista encadenada circular con un apuntador externo. El tope de la pila estar en el siguiente nodo del nodo sealado por el apuntador externo. e) Memoria dinmica: se utiliza una lista encadenada circular con un apuntador externo. Aunque no es lo ms eficiente, el tope de la pila estar en el nodo sealado por el apuntador externo. f) Memoria dinmica: se utiliza una lista doblemente encadenada con un apuntador externo, que hace referencia al ltimo nodo de la lista. El tope de la pila estar en el nodo sealado por el apuntador externo. g) Memoria dinmica: se utiliza una lista doblemente encadenada circular con un apuntador externo. El tope de la pila estar en el nodo sealado por el apuntador externo. h) Memoria dinmica: se utiliza una lista doblemente encadenada circular con un apuntador externo. El tope de la pila estar en el nodo anterior al nodo sealado por el apuntador externo. 2. Resuelva los mismos casos del ejercicio anterior, pero basndose en la especificacin lgica del diseo 2 del TDA pila. 3. Un nuevo diseo de las operaciones en la especificacin lgica del TDA pila se muestra a continuacin:
METER --> igual al diseo 2 SACAR ENTRADA: la pila de donde se desea sacar SALIDA: la pila modificada PRECONDICIN: la pila existe y no est vaca POSTCONDICION: la pila tiene un elemento menos eliminado por el extremo del tope
10
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
OBSERVA ENTRADA: la pila de donde se desea observar SALIDA: el valor del elemento que est en el tope de la pila PRECONDICION: la pila existe y no est vaca POSTCONDICION: ninguna VACIA --> igual al diseo 1
Con estas especificaciones, responda los siguientes incisos: a) Por qu se justifica el diseo de la operacin OBSERVA y VACA?, qu ventajas se tienen en el nivel de aplicacin?, por qu no se justifica el diseo de la operacin LLENA (igual al diseo 1)? b) Implemente las operaciones del nuevo diseo (SACAR y OBSERVA) en cada una de las formas de representacin que se indicaron en el ejercicio 1. c) Resuelva el problema del palndromo, en el nivel de aplicacin, utilizando ahora este diseo lgico. d) Suponiendo que la operacin OBSERVA se aade al diseo 1 y al diseo 2, cmo sera su implementacin en cada diseo, considerando que se implementar al nivel de aplicacin del resto de las operaciones del TDA pila? 4. A continuacin se muestra una serie de casos los cuales debern resolverse implementando una funcin libre en C++ en el nivel de aplicacin del TIJA pila, segn el diseo 2: a) Realice un mdulo que sirva para invertir el orden de los elementos de una pila. b) Desarrolle un mdulo que sirva para obtener una copia de una pila. c) Realice un mdulo que sirva para contar cuntos elementos tiene una pila. d) Obtenga un mdulo que sirva para sacar el elemento del fondo de una pila. e)Realice un mdulo que sirva para reemplazar por un nuevo valor las ocurrencias de cierto valor en una pila. 5. Cmo se podran implementar dos pilas en un mismo arreglo? Si se supone que una pila crecer de la primera posicin hacia adelante, y que otra crecer de la ltima posicin hacia atrs en el arreglo, y que cada una tiene un apuntador (TOPE1 y TOPE2) que indica la posicin del ltimo elemento aadido en cada pila, cul es la condicin para detectar que las pilas estn llenas? Implemente las operaciones de METER y SACAR para cada una de las pilas, segn el diseo lgico 2. 6. Una nueva representacin en memoria esttica para el TDA fila, se describe a continuacin: Se utiliza un arreglo unidimensional en forma circular, con un apuntador al frente y otro al final de la fila. La fila crece, a partir de la primera posicin del arreglo, en forma circular. El apuntador FINAL sealar el ltimo elemento aadido y el apuntador FRENTE siempre apuntar a un lugar reservado, que nunca guardar un elemento, pero siempre estar una posicin antes del siguiente elemento en salir de la fila. Con esta representacin, implemente las operaciones del TDA fila, segn el diseo lgico 2. Qu ventajas se obtienen con respecto a la representacin en que no se utilizaba el lugar reservado? 7. Para cada una de las siguientes formas de representacin fsica de una fila en memoria dinmica implemente las operaciones segn la especificacin lgica del diseo 2 para el TDA fila, suponiendo que cada operacin ser un mtodo de la clase que representa a las filas. a) Lista encadenada circular, donde el apuntador externo de la lista seala el final de la fila, y el siguiente nodo del que representa el final es el frente. b) Lista doblemente encadenada con dos apuntadores externos, uno al primer nodo en la lista y otro al ltimo. El frente de la fila ser el ltimo nodo de la lista: el final de la fila ser el primer nodo. c) Lista doblemente encadenada circular con un apuntador externo que seala el final de la fila y el nodo anterior representa el frente. d) Lista doblemente encadenada circular con un apuntador externo que seala el frente de la fila, y el nodo siguiente representa el final. 8. Suponga que la operacin OBSERVA, que se dise en el ejercicio 3, tambin es til para el TDA fila, y se aade al diseo 1 y al 2. Cmo sera su implementacin en cada diseo, considerando que se implementar en el nivel de aplicacin del resto de las operaciones del TDA fila?
Captulo 6 Pilas y Filas (Colas) 11
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
9. A continuacin se muestra una serie de casos que debern resolver, se implementando una funcin libre en C++ y trabajando en eL nivel de aplicacin del TDA fila segn el diseo 2. a) Realice un mdulo que sirva para copiar una fila. b) Obtenga un mdulo que sirva para contar los elementos de una fila. c) Realice un mdulo que sirva para reemplazar las ocurrencias de cierto valor, en una fila, por un nuevo valor. d) Desarrolle un mdulo que sirva para reorganizar los valores guardados en una fila de nmeros, de tal forma que primero queden los valores negativos (en el orden que haban llegado a la fila) y despus los positivos (en el mismo orden). 10. Cmo se podran implementar dos filas en un mismo arreglo? Suponiendo que una fila crecer de la primera posicin hacia adelante, que la otra fila crecer de la ltima posicin hacia atrs en el arreglo cada una tiene un apuntador (FINAL1 y FINAL2) que indica la posicin del ltimo elemento aadido en cada fila y que el frente de las filas siempre estar en la primera y ltima posicin del arreglo, cul es la condicin para detectar que las filas estn llenas? lmplemente las operaciones de METER y SACAR para cada una de las filas, segn el diseo lgico 2. 11. A continuacin se muestra el estado de una lista encadenada circular en memoria esttica, controlada por el apuntador externo llamado LISTA. Los espacios disponibles en el arreglo se controlan por medio de otra lista encadenada (no circular), manejada como pila, a travs del apuntador externo llamado DISPONIBLES. El valor NULL se representa por el 0 (cero)
[1] [2] [3] [4] [5] [6] [7] [8] CESAR
FRANCISCO
MANUEL
7 3 5 1 6 0 4 2 Lista = 4 Disponibles = 8
Para los incisos siguientes, muestre el estado del arreglo y de los apuntadores, despus de ejecutar la operacin correspondiente. Maneje las operaciones de filas y pilas sobre una lista circular de la manera ms eficiente (evitando recorrer nodos). Para el primer inciso, tome el estado original del arreglo; para los otros incisos, el estado del arreglo resultante del inciso anterior. a) Inserte el dato DANIEL en la lista, considerando que es la representacin de una pila. b) Inserte el dato MARA en la lista, considerando que es la representacin de una fila. c) Saque un dato de la lista, considerando que es la representacin de una pila. d) Saque un dato de la lista, considerando que es la representacin de una fila. 12. Repita el ejercicio anterior conside rando que la lista es doblemente encadenada circular, y que la lista de disponibles sigue manejndose igual (como pila) slo a travs del campo SIG. Considere que para la pila el tope es el nodo apuntado por LISTA, y que para la fila el frente es el nodo sealado por LISTA y el final es el nodo anterior a] apuntado por LISTA. 13. Cmo se puede implementar una fila al nivel de aplicacin de las pilas? Considere que la definicin de la clase fila es:
class Fila { private: Pila datos; public: // mtodos tradicionales, segn el diseo lgico };
Esto significa que tendr que simularse una fila por medio de una pila y que la implementacin de los mtodos de la clase fila se realizar en el nivel de aplicacin de las pilas.
Captulo 6 Pilas y Filas (Colas) 12
ESTRUCTURA DE DATOS . Referencia prctica con orientacin a objetos. R. Martinez y E.Quiroga - 2002
Escriba la implementacin de los mtodos de la clase fila, considerando esta representacin y el diseo lgico 2. 14. Cmo se puede implementar una pila al nivel de aplicacin de las filas? Realice lo equivalente al ejercicio anterior, pero ahora considere que se implementar una pila utilizando el nivel de aplicacin de las filas.
AUTOEVALUACIN
1. Se implemento una fila en un arreglo de cinco posiciones utilizan do dos apuntadores (FRENTE y FINAL) y Considerando que el arreglo es circular. Suponiendo que el arreglo se define con los subndices 1 a 5, y que FRENTE apunta al siguiente elemento en salir y FINAL apunta al ltimo elemento aadido, cul es el estado de la fila si el apuntador FRENTE vale 4 y el FINAL vale 3? a) La fila est llena b) La fila est vaca c) La fila tiene dos elementos d) La fila tiene un elemento e) La fila tiene tres elementos 2. La operacin OBSERVA se dise para el TDA pila de la siguiente forma: Entrada: la pila de donde se desea observar Salida: el valor prximo a sacar de la pila Precondicin: la estructura de datos est creada y tiene elementos Postcondicin: ninguna Suponiendo que la operacin se implant como un mtodo para la clase pila de la siguiente forma:
Tipoelem Observa () {return datos[tope+1];}
se puede decir que: a) La pila est implementada en un arreglo en que el apuntador TOPE seala al ltimo elemento aadido y donde la pila crece a partir de la primera posicin. b) La pila est implementada en un arreglo en que el apuntador TOPE seala al ltimo elemento aadido y donde la pila crece a partir de la ltima posicin. c) La pila est implementada en un arreglo en que el apuntador TOPE seala al siguiente lugar disponible en el arreglo y donde la pila crece a partir de la primera posicin. d) La pila est implementada en un arreglo en que el apuntador TOPE seala al siguiente lugar disponible en el arreglo y donde la pila crece a partir de la ltima posicin. e) Ninguna de las anteriores. 3. Dada la siguiente lista encadenada circular:
Lista
...
cul de los siguientes enunciados es verdadero, suponiendo que se ha representado una pila o una fila en esta lista de la manera ms eficiente? a) Para una pila, el dato M es el siguiente elemento en salir b) Para una fila, el dato M es el siguiente elemento en salir. c) Para una pila, el dato R ser el ltimo elemento en salir. d) Para una fila, el dato M ser el ltimo elemento en salir e) Para una fila, el dato R es el ltimo dato que entr.
13