Vous êtes sur la page 1sur 5

SOLUCIN AL EJERCICIO N 1 DE LISTAS,PILAS Y

COLAS
Una implementacin para esta funcin puede ser:
void BorrarValor(Lista L,int n)
{
int aux;
Posicion p;
for(p=PrimeroLista(L);p!=FinLista(L);){
Recuperar(&aux,p,L);
if (aux==n)
BorrarElemento(p,L);
else p=Siguiente(p,L);

SOLUCIN AL EJERCICIO N 2 DE LISTAS,PILAS Y


COLAS
Una implementacin para esta funcin puede ser:
void Reemplazar(pila P,int nuevo,int viejo)
{
pila Q;
int aux;
/*Creamos una pila auxiliar para almacenar enteros*/
Q=CrearPila(sizeof(int));
/*Vamos sacando elementos de P y los vamos metiendo en Q*/
/*excepto en el caso de sacar viejo,que insertamos nuevo*/
while (!VaciaPila(P)){
Tope(&aux,P);
if (aux==viejo)
Push(&nuevo,Q);
else Push(&aux,Q);
Pop(P);
}
/*ya tenemos en Q el resultado pero al contrario por tanto*/
/*solo resta volcarla de nuevo en P*/
while(!VaciaPila(Q)){
Tope(&aux,Q);
Pop(Q);
Push(&aux,P);
}

/*Finalmente liberamos los recursos que fueron reservados*/


/*para la pila auxiliar Q*/
DestruirPila(Q);

SOLUCIN AL EJERCICIO N 3 DE LISTAS,PILAS Y


COLAS
Una implementacin para esta funcin puede ser:
Lista Mezcla2(Lista l1,Lista l2)
{
Lista L;
Posicion p1,p2;
int aux1,aux2;
/*En la lista L guardaremos el resultado*/
L=CrearLista(sizeof(int));
/*Utilizamos p1 y p2 para recorrer las dos listas*/
p1=PrimeroLista(l1);
p2=PrimeroLista(l2);
/*Obtenemos los elementos apuntados por p1 y p2 ,el menor*/
/*de ellos se inserta en el resultado y se adelanta en una*/
/*posicion.Se repite el proceso hasta que una lista queda */
/*sin elementos (cuando p1 o p2 llegan al final) */
while (p!=FinLista(l1)&& p2!=FinLista(l2)){
Recuperar(&aux1,p1,l1);
Recuperar(&aux2,p2,l2);
if (aux1 < aux2){
p1=Siguiente(p1,l1);
Insertar(&aux1,FinLista(L),L);
}
else{
p2=Siguiente(p2,l2);
Insertar(&aux2,FinLista(L),L);
}
}
/*Si p1 no ha llegado al final hay que vaciar l1 al final*/
/*de la lista resultado*/
While (p1!=FinLista(l1)){
Recuperar(&aux1,p1,l1);
p1=Siguiente(p1,l1);
Insertar(&aux1,FinLista(L),L);
}
/*Si p2 no ha llegado al final hay que vaciar l2 al final*/

/*de la lista resultado*/


while (p2!=FinLista(l2)){
Recuperar(&aux2,p2,l2);
p2=Siguiente(p2,l2);
Insertar(&aux2,FinLista(L),L);
}
/*Devolvemos L como resultado estando ya l1 y l2 vacias */
return L;
}

SOLUCIN AL EJERCICIO N 4 DE LISTAS,PILAS Y


COLAS
La solucin es que salidas posibles son la primera,segunda,quinta y sexta por:
1. La salida 1 2 3 se produce cuando TEST devuelve valor distinto de cero en los 3
casos.
2. La salida 1 3 2 se produce cuando TEST devuelve 0 slo para el 2.
3. La salida 2 3 1 se produce cuando TEST devuelve 0 slo para el 1.
4. La salida 3 2 1 se produce cuando TEST devuelve 0 en los tres casos.
En general,sern salidas correctas aquellas que impriman una secuencia de N nmeros de
forma que se pueda dividir en dos partes:
1. Los M primeros nmeros mi de forma que mi< mi+1 para todo i,1 <=i <=M1(0<=M<=N)(los no almacenados en la pila,es decir,los nmeros i tal que TEST(i)
es distinto de cero).
2. Los N-M ltimos nmeros que consisten en todos los nmeros entre 1 y N que no
hayan sido listados en la primera parte y adems listados de forma decreciente.(Los
almacenados en la pila,es decir,los nmeros i tal que TEST(i) es cero).
3.

SOLUCIN AL EJERCICIO N 5 DE
LISTAS,PILAS Y COLAS

4.
5. Para solucionar este problema vamos a construir una funcin que tenga como
parmetros de entrada una lista,una posicin inicial y una posicin final.Al llamar a
la funcin sobre la lista L podremos hacerlo mediante
Suma(L,PrimeroLista(L),FinLista(L)).El cdigo es el siguiente(ntese que no se
incluye en la suma el elemento sealado por la posicin final):
6. int Suma(Lista L,Posicion inicial,Posicion final)

7. {
8.
9.
10.
11.
12.
13.
14.
15. }

int n;
if(inicial!=final){
Recuperar(&n,inicial,L);
return n+Suma(L,Siguiente(inicial,L),final);
}
else return 0;

SOLUCIN AL EJERCICIO N 6 DE LISTAS,PILAS Y


COLAS

void imprimeInverso(Posicion p,Lista l)


{
int aux;

if(p!=FinLista(l)){
imprimeInverso(Siguiente(p,l),l);
Recuperar(&aux,p,l);
print("%d",aux);
}

Vous aimerez peut-être aussi