PRG29003: Introdução a Pilhas: mudanças entre as edições

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Msobral (discussão | contribs)
Msobral (discussão | contribs)
Sem resumo de edição
Linha 24: Linha 24:




A declaração da Pilha na [http://tele.sj.ifsc.edu.br/~msobral/prg2/Prg2_Clion.tar.xz biblioteca Prglib] é esta:
Na [https://pt.wikipedia.org/wiki/Standard_Template_Library biblioteca STL] existe a estrutura de dados [http://www.cplusplus.com/reference/stack/stack/ stack], que implementa uma pilha. Suas operações elementares são estas:
 
* [http://www.cplusplus.com/reference/stack/stack/push/ push]: empilha um dado
<syntaxhighlight lang=c>
* [http://www.cplusplus.com/reference/stack/stack/pop pop]: desempilha um dado
template <typename T> class pilha {
* [http://www.cplusplus.com/reference/stack/stack/back back]: acessa o dado que está no topo da pilha
public:
* [http://www.cplusplus.com/reference/stack/stack/empty empty]: retorna ''true'' se pilha estiver vazia
  // construtor: deve-se informar a capacidade da pilha
* [http://www.cplusplus.com/reference/stack/stack/size size]: retorna a quantidade de dados armazenados na pilha
  pilha(unsigned int umaCapacidade);
  // construtor de cópia: cria uma pilha que é cópia de outra
  pilha(const pilha<T>& outra);
  // destrutor da pilha
  ~pilha();
  // operador de atribuição: torna esta pilha uma cópia de outra pilha
  pilha<T> & operator=(const pilha<T> & outra);
  // operações da pilha
  virtual void push(const T & dado); // empilha um dado
  T pop(); // desempilha um dado
  virtual const T& top() const; // retorna o dado do topo da pilha, sem retirá-lo
  bool vazia() const;
  bool cheia() const;
  unsigned int comprimento() const;
  void esvazia();
  unsigned int capacidade() const;
 
private:
  unsigned int N;
};
</syntaxhighlight>''Arquivo libs/pilha.h''




Linha 66: Linha 37:
#include <iostream>
#include <iostream>
#include <string>
#include <string>
#include <prglib.h>
#include <stack>


using namespace std;
using namespace std;
using namespace prglib;


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


   numeros.push(6);
   numeros.push(6);
Linha 83: Linha 53:


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


Linha 92: Linha 61:
== Atividades ==
== Atividades ==
* [[Introdução_C%2B%2B]]
* [[Introdução_C%2B%2B]]
* [http://tele.sj.ifsc.edu.br/~msobral/prg2/Prg2_Clion.tar.xz Biblioteca Prglib]





Edição das 17h48min 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).



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)


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;
  }

}

1 Atividades


Resolva esses problemas:

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