Advertisement
davidcastrosalinas

20201106 Utilización simple de la clase Stack y stack STL

Nov 6th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. /*****************************CLASE STACK **********************/
  7. #include <stack>
  8. template <class Tipo>
  9. class Stack : private stack<Tipo> {
  10. public:
  11.     void push(Tipo t){
  12.         stack<Tipo>::push(t);
  13.     }
  14.  
  15.     Tipo pop(){
  16.         Tipo temp = stack<Tipo>::top();
  17.         stack<Tipo>::pop();
  18.         return temp;
  19.     }
  20.  
  21.     bool empty(){
  22.         return stack<Tipo>::empty();
  23.     }
  24. };
  25.  
  26. /**********************Funciones utilizando STACK*************************/
  27. //mostrar los datos de un stack
  28. void mostrar(Stack<int> s){
  29.     cout <<"[mostrando]"<<endl;
  30.     while(!s.empty())
  31.         cout << s.pop()<<endl;
  32. }
  33.  
  34. /**2) contar(S): Función que retorna el número de elementos que contienen el stack S.***/
  35. int contarSimple(Stack<int> s){
  36.     int cont=0;
  37.     while(!s.empty()){
  38.         s.pop();
  39.         cont++;
  40.     }
  41.     return cont;
  42. }
  43.  
  44. /*contar los datos de un stack, pero pasamos la variable por referencia,
  45. acá tendremos que guardar los datos en un auxiliar y luego devolverlos al stack original */
  46.  
  47. int contar(Stack<int> &s){
  48.     int cont=0;
  49.     //guardamos
  50.     Stack<int> tmp;
  51.     while(!s.empty()){
  52.         int aux = s.pop();
  53.         tmp.push(aux); //copia
  54.         cont++;
  55.     }
  56.  
  57.     //devolver al original
  58.     while(!tmp.empty())
  59.         s.push(tmp.pop());
  60.     return cont;
  61. }
  62.  
  63. /**3) sumar(S): Función que retorna la suma de los elementos del stack S.**/
  64. int sumar(Stack<int> s){
  65.     int suma=0;
  66.     while(!s.empty())
  67.         suma+=s.pop();
  68.     return suma;
  69. }
  70.  
  71. /**4) botton(S): Función que retorna el elemento que está ubicado
  72. en el fondo (el primero que entró) del stack S. */
  73. int ultimoElemento(Stack<int> s){
  74.     int ultimo=-1;
  75.     while(!s.empty()){
  76.         ultimo=s.pop();
  77.     }
  78.     return ultimo;
  79. }
  80.  
  81. /**5) posK(S,k): Función que retorna el elemento que se ubica en
  82. la posición k (para salir) del stack S. **/
  83.  
  84. int retornaK(Stack<int> s, int k){
  85.     int c=1, t;
  86.     Stack<int> aux;
  87.     //Pasar desde s a un aux
  88.     while(!s.empty())
  89.         aux.push(s.pop());
  90.  
  91.     //Ahora revisamos el aux para comparar k
  92.     while(!aux.empty()){
  93.         t = aux.pop();
  94.         if(c==k)
  95.             return t;
  96.         c++;
  97.     }
  98.     return -1;
  99. }
  100.  
  101. int main()
  102. {
  103.     //Parte 1 de la clase: Utilizando el stack de forma nativa para c++
  104.     stack<int> s;
  105.     s.push(1);
  106.     s.push(2);
  107.     s.push(3);
  108.     s.push(4);
  109.  
  110.     //mostramos la información del stack (primero en entrar es el último en salir)
  111.     while(!s.empty()) {
  112.         cout << s.top(); //obtenemos el dato
  113.         s.pop(); //eliminamos el dato
  114.     }
  115.  
  116.     //parte 2 de la clase: Utilizando funciones Stack
  117.     Stack<int> s1;
  118.     s1.push(1001);
  119.     s1.push(1002);
  120.     s1.push(1003);
  121.     s1.push(1004);
  122.     s1.push(1005);
  123.  
  124.     mostrar(s1);
  125.     cout<<contar(s1)<<endl;
  126.     mostrar(s1);
  127.     cout<<sumar(s1)<<endl;
  128.     cout<<"ultimo:"<<ultimoElemento(s1)<<endl;
  129.     cout<<"elemento en posición k:"<<retornaK(s1,2)<<endl;
  130.  
  131.     return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement