115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Stacks
 | |
| localeTitle: Pilhas
 | |
| ---
 | |
| ## Pilhas
 | |
| 
 | |
| Stacks é uma Estrutura de Dados First In Last Out (FILO). É uma estrutura de dados linear.
 | |
| 
 | |
| Você pode imaginar uma pilha como as placas de maneira foram organizadas em restaurante buffet. Você só pode escolher a placa no topo, caso contrário a pilha entrará em colapso. Geralmente, o último item a ser inserido será removido primeiro.
 | |
| 
 | |
| Algumas operações básicas da pilha são:
 | |
| 
 | |
| 1.  Push - Insere um item no topo da pilha.
 | |
| 2.  Pop - Remove um item no topo da pilha.
 | |
| 3.  isEmpty - verifica se a pilha está vazia ou não
 | |
| 4.  Tamanho - Retorna o número de itens na pilha (Todas as operações podem ser feitas no tempo O (1))
 | |
| 
 | |
| A implementação de uma pilha é possível usando arrays ou listas vinculadas. A seguir, uma implementação de matriz simples da estrutura de dados da pilha com suas operações mais comuns.
 | |
| 
 | |
| ```C++
 | |
| //Stack implementation using array in C++ 
 | |
|  //You can also include<stack> and then use the C++ STL Library stack class. 
 | |
|  
 | |
|  #include <bits/stdc++.h> 
 | |
|  
 | |
|  using namespace std; 
 | |
|  
 | |
|  class Stack { 
 | |
|     int t; 
 | |
|     int arr[MaxN]; 
 | |
|  public: 
 | |
|     Stack() { 
 | |
|         t = 0; 
 | |
|     } 
 | |
|     int size() { 
 | |
|         return t; 
 | |
|     } 
 | |
|     bool isEmpty() { 
 | |
|         return t < 1; 
 | |
|     } 
 | |
|     int top() { 
 | |
|         return arr[t]; 
 | |
|     } 
 | |
|     void push(int x) { 
 | |
|         if (++t >= MaxN) { 
 | |
|             cout << "Stack is full" << '\n'; 
 | |
|             return; 
 | |
|         } 
 | |
|         arr[t] = x; 
 | |
|     } 
 | |
|     void pop() { 
 | |
|         arr[t--] = 0; 
 | |
|     } 
 | |
|  }; 
 | |
|  
 | |
|  int main() { 
 | |
|     Stack st; 
 | |
|  
 | |
|     st.push(4); 
 | |
|     st.push(3); 
 | |
|     st.push(5); 
 | |
|     while (!st.isEmpty()) { 
 | |
|         cout << st.size() << ' ' << st.top() << '\n'; 
 | |
|         st.pop(); 
 | |
|     } 
 | |
|     return 0; 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| #### Usando matrizes como pilhas
 | |
| 
 | |
| Em algumas linguagens de programação, uma matriz possui a funcionalidade de pilha, permitindo que o desenvolvedor realize operações **push** e **pop** sem a necessidade de uma estrutura de dados de pilha personalizada.
 | |
| 
 | |
| Por exemplo, uma matriz em JavaScript possui métodos **push** e **pop** , permitindo implementar facilmente a funcionalidade de pilha em um aplicativo.
 | |
| 
 | |
| ```js
 | |
| stack = []; 
 | |
|  
 | |
|  let i = 0; 
 | |
|  while(i < 5) 
 | |
|   stack.push(i++); 
 | |
|  
 | |
|  while(stack.length) { 
 | |
|   stack.pop(); 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Uma lista no Python também pode executar a funcionalidade de pilha em um aplicativo. Em vez de **push** , pode-se usar o método **append** .
 | |
| 
 | |
| ```python
 | |
| stack = [] 
 | |
|  
 | |
|  for i in range(5): 
 | |
|     stack.append(i) 
 | |
|  
 | |
|  while len(stack): 
 | |
|     stack.pop() 
 | |
| ```
 | |
| 
 | |
| #### Aplicações
 | |
| 
 | |
| *   Transforme a recursão em loop.
 | |
| *   Recursos de refazer desfazer.
 | |
| *   Solucionador de Sudoku
 | |
| *   Primeira pesquisa de profundidade.
 | |
| *   Travessias de árvores
 | |
| *   Expressão Infix -> Expressão Prefixo / Postfix
 | |
| *   Parênteses válidos
 | |
| 
 | |
| #### Mais Informações:
 | |
| 
 | |
| *   [Mais informações sobre pilhas - GeeksForGeeks](http://www.geeksforgeeks.org/stack-data-structure/)
 | |
| *   [Pilha - Wikipedia](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)
 | |
| *   [Tower of Hanoi Problem e como a solução usa pilhas e recursões](https://en.wikipedia.org/wiki/Tower_of_Hanoi)
 | |
| *   [Vídeo do HackerRank Stacks and Queues](https://www.youtube.com/watch?v=wjI1WNcIntg) |