Pilha
Pilha
Pilha
Exemplos :
• tabuleiro de recepção de serviço de um administrativo
• zona de memória auxiliar da execução de rotina de programação
Pilha - stack
Operações comuns:
⮚ criar uma pilha vazia
⮚ adicionar/remover um elemento à pilha
⮚ verificar qual o topo da pilha (último elemento adicionado)
Um vetor
É necessário saber o índice do elemento que está no topo da pilha.
⮚ Push: Insere o novo elemento na primeira posição vazia e incrementa o índice do topo.
⮚ Pop: Se o vetor não estiver vazio, remove o elemento que cujo índice corresponde ao topo da pilha
e decrementa o índice.
ESDA
Rui Camacho e Pedro Costa 5
|
Pilha
Uma lista ligada
🢝 Push: Insere novo elemento no início da lista.
PUSH
🢝 Pop: Remove o elemento do início da lista.
NULL
Inserir E1
Inserir E2
Inserir E3
Pilha
Uma lista ligada POP
🢝 Push: Insere novo elemento no início da lista.
🢝 Pop: Remove o elemento do início da lista.
NULL
Remover E1
Remover E2
Remover E3
Pilhas com STL
❑ As pilhas fazem parte da biblioteca de modelos padrão C++ (STL).
#include <stack>
stack <int> sta1{{12,23,45,67,34,23} }; // declara a pilha sta1 do tipo int e insere os elementos
stack<string> sta2;
stack<int> sta;
Relembrar que a pilha só insere no início por isso não existe o método insert
Relembrar que a pilha só retira do início por isso não existe o método erase.
Também não existe o find.
ESDA
Rui Camacho e Pedro Costa 9
|
Exemplo
#include <iostream> s.push(34);
#include <stack> s.push(23);
s.pop();
using namespace std; s.push(44);
s.pop();
// Print the queue s.pop();
void showq(stack<int> g) cout << "s.size() : " << s.size()<<endl;
{ cout << "s.top() : " << s.top()<<endl;
cout <<endl;
while (!g.empty()) { cout << "The stack s is : ";
cout << '\t' << g.top()<<endl; showq(s); Resultado
g.pop(); return 0;
} } The stack s is :
cout << endl; 30
} 20
int main() 10
{
stack<int> s; s.size() : 3
s.push(10); s.top() : 30
s.push(20); s.pop() :
s.push(30); 20
cout << "The stack s is : "; 10
showq(s);
s.size() : 2
cout << "s.size() : " << s.size()<<endl; s.top() : 20
cout << "s.top() : " << s.top()<<endl; The stack s is :
cout << "s.pop() : "; 20
s.pop(); 10
showq(s);
ESDA
Rui Camacho e Pedro Costa 10
|
Exemplos de aplicação
Exemplo:
Notação infixa: 2 * ( 4 + 5 ) / 3
Notação RPN: 2 4 5 + * 3 /
5 + * /
Retirar 2 Retirar 2 Retirar 2
4 4 Elementos 9 Elementos 3 Elementos
4+5=9 2* 9=18 18/3=6
2 2 2 2 18 18
ESDA
Rui Camacho e Pedro Costa 14
|
Exercício 1
Uma possível aplicação de pilhas é a conversão entre bases numéricas. Pretende-se a implementação de um
programa que faça a conversão entre números representados no sistema de numeração decimal e números
representados no sistema de numeração binário, e vice-versa.
Exemplo
Numero: 25
1 1
0 0 0
0 0 0 0
1 1 1 1 1
Exemplo
Numero: 1 1 0 0 1
1 1
0 0 0
0 0 0 0
1 1 1 1 1
24+8+1=25