Anda di halaman 1dari 5

1.

En caso de implementar una pila mediante una lista enlazada, el criterio ms eficiente para
implementar las operaciones de apilar y desapilar es:
A. Para apilar, insertar un nodo al principio de la lista (el apuntado por la variable esttica),
y para desapilar, eliminar el ltimo nodo de la lista.
B. Realizar ambas operaciones al principio de la lista.
C. Realizar ambas operaciones al final de la lista.
2. Se proponen los siguientes tipos de datos para implementar una cola mediante una lista
enlazada por medio de punteros:
Opcin cola1.
class NodoCola {
int dato;
NodoCola siguiente;
}
public class tad_cola implements Cola {
private NodoCola inicio;
public tad_cola () {
inicio = null;
}
}

Opcin cola2.
class NodoCola {
int dato;
NodoCola siguiente;
}
public class tad_cola implements Cola {
private NodoCola principio;
private NodoCola fin;
public tad_cola () {
principio = null;
fin = null;
}
}

Cul de las siguientes afirmaciones es correcta?


A. La opcin cola2 no permite definir una cola.
B. Las dos opciones son vlidas, sin embargo para la opcin cola1 hay que realizar un
tratamiento, iterativo o recursivo, para hacer alguna de las operaciones bsicas (encolar /
desencolar).
C. Las dos opciones son vlidas, sin embargo la opcin cola2 requiere la realizacin de un
tratamiento, iterativo o recursivo, para realizar alguna de las operaciones bsicas (encolar /
desencolar).
3. El siguiente algoritmo que pretende eliminar de una lista calificada ordenada el elemento, si
existe, cuya clave coincida con el dato que se pasa como argumento:
static void eliminar (NodoLista lista, int dato) {
if (lista != null)
if (lista.clave < dato)
eliminar (lista.sig, dato);
else if (lista.clave == dato)
lista = lista.sig;
else System.out.println ("ERROR: La clave no existe");
else System.out.println ("ERROR: La clave no existe");
}

Cul de las siguientes afirmaciones es correcta?


A. Funciona correctamente salvo al eliminar el primer elemento de la lista.
B. Funciona correctamente en cualquier caso.
C. No funciona en ningn caso.
4. El siguiente algoritmo pretende insertar un elemento (dato) en una lista calificada ordenada.
static void insertarIterativo (NodoLista lista, int dato) {
NodoLista anterior, actual, aux;
boolean encontrado;
anterior = lista;
actual = lista;
encontrado = false;
while ((actual != null) && !encontrado)
if (actual.clave >= dato)
encontrado = true;
else {
anterior = actual;
actual = actual.sig;
}
if (encontrado) {
if (actual.clave > dato) {
aux = new NodoLista (dato);
aux.sig = actual;
if (lista = actual)
lista = aux;
else anterior.sig = aux;
}
else System.out.println ("Error. La clave ya existe");
}
else if (actual == null) {
aux = new NodoLista (dato);
aux.sig = null;
if (lista = null)
lista = aux;
else anterior.sig = aux;
}
}

Este mtodo:
A. No funciona para insertar un elemento al principio ni tampoco al final de la lista.
B. No funciona si la lista est vaca.
C. No funciona nunca.
5. El siguiente algoritmo pretende crear una lista ordenada ascendentemente (lista3) con los
elementos comunes de dos listas tambin ordenadas ascendentemente (lista1 y lista2):
static NodoLista mezclaAnd (NodoLista lista1, NodoLista lista2, NodoLista lista3) {
NodoLista resul;
if (lista1 == null && lista2 == null)
resul = null;
else if (lista1.clave < lista2.clave)
resul = mezclaAnd (lista1.sig, lista2, lista3);
else if (lista1.clave > lista2.clave)
resul = mezclaAnd (lista1, lista2.sig, lista3);
else {
lista3 = mezclaAnd (lista1.sig, lista2.sig, lista3);
resul = new NodoLista (lista1.clave, lista3);
}

return resul;
}
static void mezclaAnd (Lista lista1, Lista lista2, Lista lista3) {
lista3.inicio = mezclaAnd (lista1.inicio, lista2.inicio, lista3.inicio);
}

Este mtodo:
A. Funciona correctamente slo en el caso de que el ltimo elemento de lista1 y el ltimo de
lista2 coincidan.
B. Funciona correctamente slo en el caso de que lista1 y lista2 tengan el mismo nmero de
elementos.
C. No funciona en ninguna circunstancia.
6. Se desea implementar una cola mediante una lista circular. Cul de las siguientes
afirmaciones es correcta?
A. La referencia puede apuntar tanto al primer como al ltimo elemento de la lista, sin
embargo se producen algoritmos ms eficientes si la referencia apunta al primero.
B. La referencia puede apuntar tanto al primer como al ltimo elemento de la lista, sin
embargo se producen algoritmos ms eficientes si la referencia apunta al ltimo.
C. La referencia debe apuntar necesariamente al ltimo elemento de la lista.
7. Dada la siguiente definicin de lista con cabecera y centinela:
public class Lista {
public Lista () {
cab = new NodoLista ();
cent = new NodoLista ();
cab.sig = cent;
}
NodoLista cab, cent;
}

El siguiente mtodo esttico eliminar pretende borrar de una lista calificada ordenada con
cabecera y centinela el elemento, si existe, cuya clave coincida con el dato que se pasa como
argumento:
public static void eliminar (Lista listaCabeceraCentinela, int dato) {
eliminarElemento (listaCabeceraCentinela.cab, listaCabeceraCentinela.cent, dato)
}
static void eliminarElemento (NodoLista cab, NodoLista cent, int dato) {
NodoLista anterior, actual;
anterior= cab;
actual= anterior.sig;
cent.clave= dato;
while (actual.clave < dato) {
anterior= actual;
actual= actual.sig;
}
if ((actual == cent) || (actual.clave > dato))
System.out.println ("Error, elemento inexistente");
else anterior.sig= actual.sig;
}

Seleccione una respuesta.


A. Funciona correctamente salvo en el caso del primer elemento de la lista.
B. No funciona en ningn caso.
C. Funciona correctamente en cualquier caso.

8. Dada la siguiente definicin de lista calificada ordenada doblemente enlazada:


class NodoLista {
int clave;
NodoLista sig, ant;
public NodoLista(int x) {
clave=x;
sig=null;
ant= null;
}
}
public class Lista {
public Lista () {
inicio = null;
}
NodoLista inicio;
}

El siguiente algoritmo pretende insertar un elemento, pasado como argumento, en una lista del
tipo anterior:
static void inser (Lista lista, int dato) {
NodoLista aux, listaAux = lista.inicio;
if (listaAux.clave == dato)
System.out.println ("Error. Elemento repetido");
else if (listaAux.clave > dato) {
aux = new NodoLista (dato);
aux.sig = listaAux;
aux .ant = listaAux.ant;
listaAux.ant = aux;
listaAux = aux;
lista.inicio = listaAux;
}
else if (listaAux.sig != null) {
lista.inicio = listaAux.sig;
inser (lista, dato);
listaAux.sig = lista.inicio;
lista.inicio = listaAux;
}
}
public static void insertar (Lista lista, int dato) {
if (lista.inicio == null) {
NodoLista aux = new NodoLista (dato);
aux.ant = null;
aux.sig = null;
lista.inicio = aux;
}
else inser (lista,dato);
}

Seleccione una respuesta.


A. Falla en caso de tratar de insertar un dato inferior al primero de los elementos de la lista.
B. Funciona correctamente.
C. Falla en caso de tratar de insertar un dato superior al ltimo de los elementos de la lista.

Soluciones:
Pregunta Respuesta Justificacin
1
B
De esta forma se accede directamente al punto de acceso
de la pila (sin necesidad de tratamientos iterativo (consumo
de tiempo) ni recursivo (consumo de tiempo y de memoria).
2
B
La opcin cola1 slo define un punto de acceso a la
estructura. Por tanto, para alcanzar el otro extremo habr
que realizar un recorrido completo de la lista enlazada.
3
C
El parmetro lista va tomando, durante la fase de ida del
tratamiento recursivo, el valor de la referencia a cada uno de
los nodos de la lista hasta llegar al que se pretende eliminar.
En ese momento se modifica su valor y se retorna a la
instancia anterior. Para que el resultado tenga efecto la lista
debera pasarse por referencia: el argumento debera ser de
tipo Lista en vez de NodoLista, o bien devolver un NodoLista
como resultado para enlazar correctamente los nodos a la
vuelta.
4
B
Si la lista esta vaca no inserta el elemento. Adems,
funciona para insertar un elemento al final pero no al
principio. Para que funcione en todos los casos se debera
pasar como argumento un elemento de la clase Lista, o bien
devolver como resultado un NodoLista para enlazar
correctamente los nodos a la vuelta
5
A
La primera condicin debera ser:
if ((lista1 == null) || (lista2. == null))
6
B
Mediante la referencia al ltimo elemento de una lista circular
se tiene acceso inmediato (sin necesidad de recorrer la lista)
a ambos extremos de la cola. La referencia cola, apuntara al
ltimo elemento de la lista, y cola.sig al primero.
7
C
Se trata de una lista con cabecera y centinela y las
referencias a dichos nodos nunca se modifican (aunque
pueda modificarse algn campo de los nodos), por lo que se
pueden utilizar como argumentos la cabecera y el centinela.
8
C
Se alcanza la condicin de terminacin pesimista cuando el
dato que se pretende insertar es superior al ltimo. El
algoritmo no contempla tratamiento de insercin cuando
(lista.clave < dato) && (lista.sig == null).