Fundamentos de la fortuna dejada class3- sujeto elemento más pequeño en la pila de retorno 2

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
Aquí Insertar imagen Descripción
(2) Resultados completos: Supongamos 10,13,5,7,3 respectivamente pila, la pila es entonces dos veces
Aquí Insertar imagen Descripción
el mínimo
Aquí Insertar imagen Descripción

Publicado 51 artículos originales · ganado elogios 1 · vistas 1391

Supongo que te gusta

Origin blog.csdn.net/shi_xiao_xuan/article/details/103578253
Recomendado
Clasificación