Fundamentos de la fortuna dejada class3- sujeto elemento más pequeño en la pila de retorno 2
1. Tema
Lograr una pila particular, la pila de las funciones básicas se implementan en la pila de retorno y luego para lograr los elementos operativos mínimos.
[Requisitos]
1. pop complejidad de tiempo, empujar, operaciones getMin son O (1).
2. Tipo de pila de diseño puede utilizar la estructura de pila ya hecho.
2. Análisis
1 puede ser utilizado directamente en STL Pila #include<stack>
:
(. 1) Vacío () devuelve verdadero pila está vacía o
(2) pop () para eliminar el elemento superior, no vuelve
(3) push () aumento de elementos de la pila
(4) size () devuelve el número de elementos en la pila
(5). arriba () devuelve el elemento superior, no elimina
Nota: pOP () no devuelve sólo se elimina, y la parte superior () devuelve no sólo eliminan
2. ideas: el uso de dos pilas completas listas, una primera pila para almacenar datos, toda la pila, la pila se completó en lo anterior MyStack llamado. La segunda pila se utiliza para almacenar un valor mínimo, designados de la siguiente manera el uso de la ayuda, si MyStack el apilamiento, el comparador y el número de elementos de ayuda que acaba de agregar pila de la pila, la pila cualquier persona que es poca presión. Si la pila no está vacía, entonces los dos pila directamente de la pila.
. EG
1. Supongamos que la pila 10, y ayuda MyStack están vacías, todo inserta en la pila;
2,13 pila, directamente en el MyStack, ayuda pila 10, a menos de 13, 10 de prensa-equipado;
3,5 pila, MyStack compresión directa en, ayuda pila 10, más de cinco, equipado pulse 5.
4. Pila, MyStack se vacía, mystack5 la pila, ayuda la posición superior de la pila 5, la ayuda de la parte superior 10 se vuelve.
código 3. núcleo
Los dos pila pilas, las operaciones de pop se encapsulan en función de
(1) Dibujo
void add_num(stack <int> &s1,stack <int> &s2,int num)
{
s1.push(num);
if(s2.empty())
{
s2.push(num);
}
else
{
s2.push(num > s2.top() ? s2.top():num);
}
}
(2) fuera de la pila
void sub_num(stack <int> &s1,stack <int> &s2)
{
if(s1.empty())
{
return;
}
else
{
s2.pop();
s1.pop();
}
}
3. Obtener un mínimo
int getmin(stack <int> s2)
{
return s2.top();
}
4. El código completo
#include<stack>
#include<iostream>
using namespace std;
int getmin(stack <int> s2)
{
return s2.top();
}
void sub_num(stack <int> &s1,stack <int> &s2)
{
if(s1.empty())
{
return;
}
else
{
s2.pop();
s1.pop();
}
}
void add_num(stack <int> &s1,stack <int> &s2,int num)
{
s1.push(num);
if(s2.empty())
{
s2.push(num);
}
else
{
s2.push(num > s2.top() ? s2.top():num);
}
}
int main()
{
stack <int> mystack;
stack <int> help;
add_num(mystack,help,10);
cout<<getmin(help)<<endl;
add_num(mystack,help,13);
cout<<getmin(help)<<endl;
add_num(mystack,help,5);
cout<<getmin(help)<<endl;
add_num(mystack,help,7);
cout<<getmin(help)<<endl;
add_num(mystack,help,3);
cout<<getmin(help)<<endl;
sub_num(mystack,help);
cout<<getmin(help)<<endl;
system("pause");
return 0;
}
5. resultados
(1) Resultados de pila: la pila se supone 10,13,5,7,3
(2) Resultados completos: Supongamos 10,13,5,7,3 respectivamente pila, la pila es entonces dos veces
el mínimo