C/Visual C - Recursividad con pilas

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 6 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Recursividad con pilas

Publicado por Darwin (1 intervención) el 24/04/2020 14:25:56
Hola buenas,
Tengo una duda sobre un problema de recursividad con pilas, el planteamiento es este:
-Crear una función exactamente así:
void concatenar_pilas(stack<int> &p, stack<int> &q, stack<int> &concatp);
/* Pre: p = P i q = Q i concatp esta vacia */
/* Post: concatp contiene arriba los elementos de P en
el mismo orden, i abajo los elementos de Q en el mismo
orden */

-Un ejemplo:
pila 1: 1|2|5|4]
pila 2: 3|2|7]
pila concatenación: 1|2|5|4|3|2|7]

-Este es mi código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void concatena_pilas(stack<int> &p, stack<int> &q, stack<int> &concatp)
/* Pre: p = P i q = Q i concatp esta vacia */
         /* Post: concatp contiene arriba los elementos de P en
            el mismo orden, i abajo los elementos de Q en el mismo
            orden */
{
   if (p.size()==1 and q.size()==1){
      concatp.push(q.top());
      concatp.push(p.top());
   }
   else{
      if(not q.empty()){
         concatp.push(q.top());
         q.pop();
      }
      else{
         concatp.push(p.top());
         p.pop();
      }
      if (not (p.empty() and q.empty())) concatena_pilas(p, q, concatp);
   }
 
}

-Y este es mi output (siendo pila 1: 1|2|5|4] y pila 2: 3|2|7]):
pila concatenació: 4|5|2|1|7|2|3]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recursividad con pilas

Publicado por Nacho (67 intervenciones) el 24/04/2020 16:31:40
Claro, la concatenación que quieres sacar es de una pila LIFO y la que sacas es de una FIFO. En una LIFO el último en entrar es el primero en salir, y si metes 1,2,3 sacas 1,2,3. En una FIFO el primero en salir es el último en entrar, y si metes 1,2,3 sacas 3,2,1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar