Mudanças entre as edições de "PRG29003: Introdução a Pilhas"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 65: Linha 65:
 
Resolva esses problemas:
 
Resolva esses problemas:
 
# [https://github.com/IFSC-Engtelecom-Prg2/EmpilhaCaracteres Empilhador de caracteres]
 
# [https://github.com/IFSC-Engtelecom-Prg2/EmpilhaCaracteres Empilhador de caracteres]
# [https://moodle.sj.ifsc.edu.br/mod/vpl/view.php?id=5575 Inversor das linhas de um arquivo]
+
# [https://github.com/IFSC-Engtelecom-Prg2/InversorLinhas Inversor das linhas de um arquivo]
# [https://moodle.sj.ifsc.edu.br/mod/vpl/view.php?id=5577 Normalizar caminhos de arquivos]
+
# [https://github.com/IFSC-Engtelecom-Prg2/CaminhosArquivos Reduzir caminhos de arquivos]
 
# [https://moodle.sj.ifsc.edu.br/mod/vpl/view.php?id=5576 Criação de uma fila usando pilhas]
 
# [https://moodle.sj.ifsc.edu.br/mod/vpl/view.php?id=5576 Criação de uma fila usando pilhas]

Edição das 18h13min de 26 de fevereiro de 2020

Próxima aula


Pilhas são estruturas de dados lineares, em que os dados são retirados em ordem inversa a que foram inseridos. Esse comportamento é denominado LIFO (Last In First Out - último a entrar, primeiro a sair).


PRG2-Stack example.jpg
Algumas pilhas da vida real ...


Pilhas apresentam três operações típicas:

* Push: empilha um novo dado (acrescenta-o ao topo da pilha).
* Pop: desempilha um dado (retira-o do topo da pilha)
*Top: acessa o dado do topo da pilha (sem retirá-lo)
Prg-pilha.jpg


Algumas aplicações de pilhas são:


Na biblioteca STL existe a estrutura de dados stack, que implementa uma pilha. Suas operações elementares são estas:

  • push: empilha um dado
  • pop: desempilha um dado
  • back: acessa o dado que está no topo da pilha
  • empty: retorna true se pilha estiver vazia
  • size: retorna a quantidade de dados armazenados na pilha


... e um exemplo de uso é mostrado a seguir:

#include <iostream>
#include <string>
#include <stack>

using namespace std;

int main() {
  // uma pilha para armazenar inteiros
  stack<int> numeros;

  numeros.push(6);
  numeros.push(8);
  numeros.push(10);
  numeros.push(12);

  cout << "Pilha de numeros tem comprimento=" << numeros.comprimento() << endl;

  while (not numeros.vazia()) {
    cout << "Topo da pilha: " << numeros.back() << " e o desempilhou ..." << endl;
  }

}

Atividades


Resolva esses problemas:

  1. Empilhador de caracteres
  2. Inversor das linhas de um arquivo
  3. Reduzir caminhos de arquivos
  4. Criação de uma fila usando pilhas