Empilhar C++ STL com exemplo

O que รฉ std::stack?

Uma pilha รฉ uma estrutura de dados que opera com base na tรฉcnica LIFO (Last In First Out). O std::stack permite que elementos sejam adicionados e removidos apenas de uma extremidade.

A classe std::stack รฉ um adaptador de contรชiner. Os objetos contรชiner contรชm dados de um tipo de dados semelhante. Vocรช pode criar uma pilha a partir de vรกrios contรชineres de sequรชncia. Se nenhum contรชiner for fornecido, o deque container serรก usado por padrรฃo. Os adaptadores de contรชiner nรฃo oferecem suporte a iteradores, portanto, nรฃo podem ser usados โ€‹โ€‹para manipular dados.

Sintaxe de pilha

Para criar uma pilha, devemos incluir o arquivo de cabeรงalho em nosso cรณdigo. Em seguida, usamos esta sintaxe para definir std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • Formato โ€“ รฉ o tipo de elemento contido em std::stack. Pode ser qualquer vรกlido C++ tipo ou atรฉ mesmo um tipo definido pelo usuรกrio.
  • Recipiente โ€“ รฉ o tipo do objeto contรชiner subjacente.

Tipos de membros

Aqui estรฃo os tipos de membros da pilha:

  • value_type- O primeiro parรขmetro do modelo, T. Ele denota os tipos de elementos.
  • container_type- O segundo parรขmetro do modelo, Container. Denota o tipo de contรชiner subjacente.
  • size_type- Tipo integral nรฃo assinado.

Operaรงรตes na pilha

A C++ stack suporta as seguintes operaรงรตes bรกsicas:

  • push โ€“ Adiciona/empurra um item para a pilha.
  • pop โ€“ Remove/retira um item da pilha.
  • peek โ€“ Retorna o item do topo da pilha sem removรช-lo.
  • isFull โ€“ Verifica se uma pilha estรก cheia.
  • isEmpty โ€“ Verifica se uma pilha estรก vazia.

Implementaรงรฃo de pilha

Implementaรงรฃo de pilha

Passo 1) Inicialmente temos uma pilha vazia. O topo de uma pilha vazia รฉ definido como -1.

Passo 2) A seguir, colocamos o elemento 5 na pilha. O topo da pilha apontarรก para o elemento 5.

Passo 3) A seguir, colocamos o elemento 50 na pilha. O topo da pilha muda e aponta para o elemento 50.

Passo 4) Em seguida, executamos uma operaรงรฃo pop, removendo o elemento superior da pilha. O elemento 50 รฉ retirado da pilha. O topo da pilha agora aponta para o elemento 5.

push() e pop()

As funรงรตes stack::push() adicionam um novo item ao topo da pilha. O tamanho da pilha รฉ aumentado em 1 apรณs a inserรงรฃo. A funรงรฃo assume esta sintaxe:

stack.push(value)

O valor รฉ o item a ser inserido na pilha.

A funรงรฃo stack::pop() remove o elemento superior da pilha. Este รฉ o item mais novo da pilha. O tamanho da pilha รฉ reduzido em 1 apรณs a remoรงรฃo. Aqui estรก a sintaxe da funรงรฃo:

stack.pop()

A funรงรฃo nรฃo aceita parรขmetros.

1 exemplo:

#include <iostream> 
#include <stack> 
using namespace std;
int main() {
	stack<int> st;
	st.push(10);
	st.push(20);
	st.push(30);
	st.push(40);
	
         st.pop();
	st.pop();

	while (!st.empty()) {
		cout << ' ' << st.top();
		st.pop();
	}
}

Saรญda:

push() e pop()

Aqui estรก uma captura de tela do cรณdigo:

push() e pop()

Code Explicaรงรฃo:

  1. Inclua o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho da pilha em nosso cรณdigo para usar suas funรงรตes.
  3. Inclua o namespace std em nosso cรณdigo para usar suas classes sem chamรก-lo.
  4. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada nesta funรงรฃo.
  5. Crie uma pilha st para armazenar valores inteiros.
  6. Use a funรงรฃo push() para inserir o valor 10 na pilha.
  7. Use a funรงรฃo push() para inserir o valor 20 na pilha.
  8. Use a funรงรฃo push() para inserir o valor 30 na pilha.
  9. Use a funรงรฃo push() para inserir o valor 40 na pilha.
  10. Use a funรงรฃo pop() para remover o elemento superior da pilha, ou seja, 40. O elemento superior agora se torna 30.
  11. Use a funรงรฃo pop() para remover o elemento superior da pilha, ou seja, 30. O elemento superior agora se torna 20.
  12. Use um loop while e uma funรงรฃo vazia() para verificar se a pilha NรƒO estรก vazia. O ! รฉ o operador NOT.
  13. Imprimindo o conteรบdo atual da pilha no console.
  14. Chame a funรงรฃo pop() na pilha.
  15. Fim do corpo do loop while.
  16. Fim do corpo da funรงรฃo main().

vazio(), tamanho(), topo()

As pilhas possuem funรงรตes integradas que vocรช pode usar para brincar com a pilha e seus valores. Esses incluem:

  • vazio()- verifica se uma pilha estรก vazia ou nรฃo.
  • size()- retorna o tamanho da pilha, ou seja, o nรบmero de elementos em uma pilha.
  • top() - acessa o elemento da pilha no topo.

2 exemplo:

#include <iostream> 
#include <stack>  
using namespace std;
void createStack(stack <int> mystack)
{
	stack <int> ms = mystack;
	while (!ms.empty())
	{
		cout << '\t' << ms.top();
		ms.pop();
	}
	cout << '\n';
}
int main()
{
	stack <int> st;
	st.push(32);
	st.push(21);
	st.push(39);
	st.push(89);
	st.push(25);

	cout << "The stack st is: ";
	createStack(st);
	cout << "\n st.size() : " << st.size();
	cout << "\n st.top() : " << st.top();
	cout << "\n st.pop() : ";
	st.pop();
	createStack(st);
	return 0;
}

Saรญda:

vazio(),tamanho(),topo()

Aqui estรก uma captura de tela do cรณdigo:

vazio(),tamanho(),topo()

Code Explicaรงรฃo:

  1. Inclua o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho da pilha em nosso cรณdigo para usar suas funรงรตes.
  3. Inclua o namespace std em nosso programa para usar suas classes sem chamรก-lo.
  4. Crie a funรงรฃo createStack que podemos usar para criar a pilha mystack. A pilha conterรก um conjunto de inteiros.
  5. O inรญcio do corpo da funรงรฃo createStack.
  6. Crie uma instรขncia do tipo de dados mystack e dรช a ela o nome ms.
  7. Use o loop while e a funรงรฃo vazia() para verificar se a pilha estรก vazia.
  8. O inรญcio do corpo do loop while.
  9. Use a funรงรฃo top() armazenada no topo da pilha. O caractere \t criarรก uma nova aba.
  10. Use a funรงรฃo pop() para excluir o elemento no topo da pilha.
  11. Fim do corpo do loop while.
  12. Imprima uma linha em branco no console.
  13. Fim do corpo da funรงรฃo createStack.
  14. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo da funรงรฃo main().
  15. O inรญcio do corpo da funรงรฃo main().
  16. Crie um objeto de pilha st.
  17. Use a funรงรฃo push() para inserir o elemento 32 na pilha.
  18. Use a funรงรฃo push() para inserir o elemento 21 na pilha.
  19. Use a funรงรฃo push() para inserir o elemento 39 na pilha.
  20. Use a funรงรฃo push() para inserir o elemento 89 na pilha.
  21. Use a funรงรฃo push() para inserir o elemento 25 na pilha.
  22. Imprima algum texto no console.
  23. Chame a funรงรฃo createStack para executar as operaรงรตes de inserรงรฃo acima na pilha.
  24. Imprima o tamanho da pilha no console junto com outro texto.
  25. Imprima o elemento no topo da pilha no console.
  26. Imprima algum texto no console.
  27. Exclua o elemento no topo da pilha. Em seguida, ele retornarรก os elementos restantes na pilha.
  28. Chame a funรงรฃo createStack para executar as operaรงรตes acima.
  29. O programa deve retornar o valor apรณs a conclusรฃo bem-sucedida.
  30. Fim do corpo da funรงรฃo main().

emplace() e swap()

Estas sรฃo outras funรงรตes de pilha integradas:

  • emplace()- constrรณi e insere um novo elemento no topo da pilha.
  • swap()- troca o conteรบdo da pilha com o conteรบdo de outra pilha.

3 exemplo:

#include <iostream>    
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st1;
	stack<int> st2;

	st1.emplace(12);
	st1.emplace(19);

	st2.emplace(20);
	st2.emplace(23);

	st1.swap(st2);

	cout << "st1 = ";
	while (!st1.empty()) {
		cout << st1.top() << " ";
		st1.pop();
	}

	cout << endl << "st2 = ";
	while (!st2.empty()) {
		cout << st2.top() << " ";
		st2.pop();
	}
}

Saรญda:

substituir()& trocar()

Aqui estรก uma captura de tela do cรณdigo:

substituir()& trocar()

Code Explicaรงรฃo:

  1. Inclua o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho da pilha em nosso cรณdigo para usar suas funรงรตes.
  3. Inclua o arquivo de cabeรงalho cstdlib em nosso cรณdigo para usar suas funรงรตes.
  4. Inclua o namespace std em nosso cรณdigo para usar suas classes sem chamรก-lo.
  5. Chame a funรงรฃo main(). A lรณgica do programa serรก adicionada ao corpo desta funรงรฃo.
  6. Declare uma pilha chamada st1 para armazenar valores inteiros.
  7. Declare uma pilha chamada st2 para armazenar valores inteiros.
  8. Use a funรงรฃo emplace() para inserir o inteiro 12 na pilha chamada st1.
  9. Use a funรงรฃo emplace() para inserir o inteiro 19 na pilha chamada st1.
  10. Use a funรงรฃo emplace() para inserir o inteiro 20 na pilha chamada st2.
  11. Use a funรงรฃo emplace() para inserir o inteiro 23 na pilha chamada st2.
  12. Use a funรงรฃo swap() para trocar o conteรบdo das duas pilhas, st1 e st2. O conteรบdo da pilha st1 deve ser movido para a pilha st2. O conteรบdo da pilha st2 deve ser movido para a pilha st1.
  13. Imprima algum texto no console.
  14. Use a instruรงรฃo while e a funรงรฃo vazia() para verificar se a pilha st1 nรฃo estรก vazia.
  15. Imprima o conteรบdo da pilha st1 no console. O โ€ โ€ adiciona espaรงo entre os elementos da pilha ao imprimi-los no console.
  16. Execute a funรงรฃo pop() na pilha st1 para remover o elemento superior.
  17. Fim do corpo da instruรงรฃo while.
  18. Imprima algum texto no console. O final รฉ um C++ palavra-chave para a linha final. Ele move o cursor do mouse para a prรณxima linha para comeรงar a imprimir a partir daรญ.
  19. Use a instruรงรฃo while e a funรงรฃo vazia() para verificar se a pilha st2 nรฃo estรก vazia.
  20. Imprima o conteรบdo da pilha st2 no console. O โ€ โ€ adiciona espaรงo entre os elementos da pilha ao imprimi-los no console.
  21. Execute a funรงรฃo pop() na pilha st2 para remover o elemento superior.
  22. Fim do corpo da instruรงรฃo while.
  23. Fim do corpo da funรงรฃo main().

Pilha em STL

A STL (Standard Template Library) vem com classes de modelo que fornecem C++ estruturas de dados. Portanto, uma pilha tambรฉm pode ser implementada em STL. Simplesmente incluรญmos esta biblioteca em nosso cรณdigo e a usamos para definir uma pilha.

stack<T> st; 

A sintaxe acima declara uma pilha st para elementos do tipo de dados T.

4 exemplo:

#include <iostream>      
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st;
	st.push(12);
	st.push(19);
	st.push(20);
	cout << st.top();   
	cout << st.size();  
}

Saรญda:

Pilha em STL

Aqui estรก uma captura de tela do cรณdigo:

Pilha em STL

Code Explicaรงรฃo:

  1. Inclua o arquivo de cabeรงalho iostream em nosso cรณdigo para usar suas funรงรตes.
  2. Inclua o arquivo de cabeรงalho da pilha em nosso cรณdigo para usar suas funรงรตes.
  3. Inclua o arquivo de cabeรงalho cstdlib em nosso cรณdigo para usar suas funรงรตes.
  4. Inclua o namespace std em nosso cรณdigo para usar suas classes sem chamรก-lo.
  5. Chame a funรงรฃo main(). A lรณgica do programa deve ser adicionada ao corpo desta funรงรฃo.
  6. Declare uma pilha st para armazenar dados inteiros.
  7. Adicione o elemento 12 ร  pilha.
  8. Adicione o elemento 19 ร  pilha.
  9. Adicione o elemento 20 ร  pilha.
  10. Imprima o elemento no topo da pilha no console.
  11. Imprima o tamanho da pilha no console.
  12. Fim do corpo da funรงรฃo main().

Resumo

  • Uma pilha รฉ uma estrutura de dados que opera com base na tรฉcnica LIFO (Last In first Out).
  • O std::stack permite apenas que itens sejam adicionados e removidos de uma extremidade.
  • A classe std::stack รฉ um adaptador de contรชiner, contendo itens de tipo de dados semelhante.
  • Uma pilha pode ser criada a partir de vรกrios contรชineres de sequรชncia.
  • Se vocรช nรฃo fornecer um contรชiner, o contรชiner deque serรก usado por padrรฃo.
  • A funรงรฃo push() serve para inserir itens na pilha.
  • A funรงรฃo pop() serve para remover o item superior da etapa.
  • A funรงรฃo vazia() serve para verificar se uma pilha estรก vazia ou nรฃo.

Resuma esta postagem com: