SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
Curso Superior de Tecnologia em Telemática
                          Programação e Estruturas de Dados

Pilhas – Fundamentos e Implementações
                                               Copyright©2010
                                               Prof. César Rocha
                                        cesarocha@ifpb.edu.br 1
Objetivos

§ Explorar os conceitos fundamentais acerca do uso
  de pilhas utilizando a linguagem C
   § Organização e implementação, características,
     vantagens, desvantagens, regras de utilização,
     operações básicas e algoritmos de implementação
§ Neste módulo, serão abordadas ainda as seguintes
  implementações: seqüencial e encadeada
§ Este módulo será utilizado como referência na
  entrega dos futuros projetos
   § Implementação das estruturas e algoritmos, criação
     das bibliotecas e práticas de laboratório
                                                          2
Motivação

§ Uma das estruturas de dados mais simples é a pilha
  § Possivelmente, por esta razão, a pilha é uma das
    estrutura de dados mais utilizada em programação
§ A pilha vem sendo, inclusive, muito implementada
  pelo hardware da maioria das máquinas modernas
  § Lembre-se da “pilha de chamadas” de funções
     § Variáveis locais são empilhadas na pilha
     § Ao término da função, as variáveis são desempilhadas
§ É um TAD onde as operações de inserção e retirada
  são efetuadas apenas no final da estrutura
                                                              3
Motivação

§ A idéia fundamental da pilha é que todo o acesso a
  seus elementos é feito através do seu topo
   § Seja na inserção ou na remoção de elementos
   § Assim, quando um novo elemento é introduzido na
     pilha, passa a ser o elemento do topo - e o único
     elemento que pode ser removido da pilha é o topo
§ Isto faz com que os elementos da pilha sejam
  retirados na ordem inversa à ordem em que foram
  introduzidos inicialmente
   § O primeiro que sai é o último que entrou
   § Estruturas tipo LIFO (last in, first out strategy)
                                                            4
Estratégia

§ Podemos fazer uma analogia com uma pilha de
  pratos em um restaurante
  § Se quisermos adicionar um prato na pilha, o colocamos
    no topo da pilha de pratos
  § Para pegar um prato da pilha, retiramos o do topo
§ Ou ainda: um software que implemente a função
  UNDO (o famigerado “Crtl+Z”)
  § A última ação feita será a primeira a ser desfeita
  § Não podemos retirar qualquer ação! Segue-se a ordem!
  § Não podemos inserir uma ação na pilha de ações caso
    ela não se torne a última!                          5
Propriedades

§ Propriedades de uma pilha:
   §   Existem n elementos empilhados;
   §   E1 é o elemento base da pilha;
   §   En é o elemento topo da pilha;
§ A inserção de um primeiro elemento E1 em uma
  pilha vazia, torna-o o último a sair da estrutura
§ Não se pode consultar qualquer elemento
§ A inserção é sempre feita acima do elemento En
§ A retirada é sempre feita no elemento En

                                                        6
Tipos de pilhas

§ Neste estágio, estaremos trabalhando com dois
  tipos de pilhas: seqüenciais e encadeadas
  Œ Seqüencial: neste TAD, os elementos desta pilha são
   armazenados em endereços seqüenciais. Materializada
   na forma de um vetor (arranjo ou matriz).
        v[ ]   12        09        ...
                0        1    2    ...   MAX-1
        Topo


  • Encadeada: elementos encadeados por ponteiros

TPilhaEnc p*        12            09
                                                           7
Pilhas seqüenciais

                    Pense um pouco...
    § O que você acha que seria necessário para
      implementar uma biblioteca de um novo TAD que
      representasse uma pilha seqüencial?
         Œ um vetor de elementos (tamanho pré-definido)
         • uma variável que controle o topo da pilha
• É preciso deslocar
 • É preciso deslocar   Pilha Vazia   ?   ?   ?    ...   ?   Topo = -1
os elementos a cada
 os elementos a cada
inserção ou remoção
 inserção ou remoção     Insere A     A   ?   ?    ...   ?   Topo = 0
da pilha? Porquê?
 da pilha? Porquê?
• Como poderíamos
• Como poderíamos        Insere B     A   B   ?    ...   ?   Topo = 1
adaptar uma lista
adaptar uma lista
seqüencial a uma
seqüencial a uma         Retira B     A   ?   ?    ...   ?   Topo = 0
pilha?
pilha?                                                                   8
Pilhas seqüenciais – modus operandi

§ Iremos implementar este novo TAD utilizando as
  mesmas diretrizes das listas seqüenciais (já vistas)
§ Teremos uma variável topo que irá servir de apoio
  para as inserções e remoções da pilha
   § E a variável posUltimo da lista seqüencial? Dá pra
     reaproveitar?
§ Mas, as regras de inserção/remoção agora irão
  mudar!
   § Algumas funções da lista seqüencial (inserir ou remover
     mediante uma posição, entre outras) deverão ser
     eliminadas neste novo TAD
                                                           9
Operações em pilhas seqüenciais

§ A literatura é unânime quanto às operações básicas
  realizadas numa estrutura pilha seqüencial:
   Πcriar uma pilha vazia
   • verificar se uma pilha está vazia
   Ž verificar se uma pilha está cheia
   • consultar o topo da pilha (sem remover)
   • empilhar um novo elemento
   ‘ desempilhar o elemento do topo
   ’ exibir / imprimir os elementos de uma pilha

                                                   10
Pilhas encadeadas

§ O que fazer quando o número máximo de elementos
  na pilha não é conhecido?
   § Devemos implementar a pilha usando uma estrutura
     de dados dinâmica (com alocação dinâmica)
                                       dinâmica
   § Podemos empregar os conceitos vistos nas listas
     simplesmente encadeadas
§ Porém, se memória não constitui um problema na
  hora do armazenamento de dados, a pilha
  seqüencial (com vetores) pode parecer mais simples
   § Até porque não há mais os deslocamentos nas
     inserções e remoções de elementos na lista seqüencial
                                                         11
Pilhas encadeadas

                Pense mais um pouco...
   § O que você acha que seria necessário para
     implementar uma biblioteca de um novo TAD que
     representasse uma pilha encadeada?
        Œ uma struct representando um nó da pilha (dado e
         ponteiro para o próximo nó da pilha).
        • um ponteiro para o 1º nó representando a pilha
• Como poderíamos
• Como poderíamos        P
adaptar uma lista
adaptar uma lista
encadeada a uma pilha?
encadeada a uma pilha?       12               09
• Onde será o topo da
• Onde será o topo da
pilha: no início ou no
pilha: no início ou no            topo da pilha?
final da lista?
final da lista?
                                                            12
Pilhas encadeadas - modus operandi

§ O primeiro elemento (início) da lista encadeada irá
  representar o topo atual da pilha
   § Cada novo elemento será inserido no início da lista e,
     conseqüentemente, sempre que solicitado, retiramos o
     elemento também a partir do início da lista
§ Desta forma, vamos precisar de apenas duas
  funções auxiliares na lista:
   Œ uma para inserir no início (empilhar)
   • outra para remover do início (desempilhar)
§ Ambas as funções retornam o novo primeiro nó da
  lista (o topo)                                          13
Operações em pilhas encadeadas

§ A literatura é unânime quanto às operações básicas
  realizadas numa estrutura pilha encadeada:
   Πcriar uma pilha vazia
   • verificar se uma pilha está vazia
   Ž verificar se uma pilha está cheia
   • consultar o topo da pilha (sem remover)
   • empilhar um novo elemento
   ‘ desempilhar o elemento do topo
   ’ exibir / imprimir os elementos de uma pilha

                                                   14
Algoritmos em C

§ O que deverá ser feito pelo aluno:
   § Escolha e instalação do ambiente a ser trabalhado no
     laboratório
   § Modelagem deste TAD (dados e operações)
   § Implementação dos algoritmos de operações básicas
     vistos em sala de aula na linguagem C
   § Utilização das regras de modelagem vistas no módulo
     anterior (criação de bibliotecas) e modularização
   § Implantação de código legível e bem documentado
   § Nomes de variáveis condizentes com o problema
   § Prática de laboratório
                                                            15
Para um bom aproveitamento:

§ O aluno deve identificar a relação entre TAD
  (biblioteca e modularização) com a implementação
  da lista encadeada no código!
§ Resolva todas as questões da prática de
  laboratório de pilhas sequencial e encadeadas
§ Procure o professor ou monitor da disciplina e
  questione conceitos, listas, etc.
§ Não deixe para codificar tudo e acumular assunto
  para a primeira avaliação.
  § Este é apenas um dos assuntos abordados na prova!
                                                        16

Más contenido relacionado

La actualidad más candente

Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasLeinylson Fontinele
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESSelliando dias
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 

La actualidad más candente (20)

Aula 20
Aula 20Aula 20
Aula 20
 
Aula05
Aula05Aula05
Aula05
 
Aula 13
Aula 13Aula 13
Aula 13
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESS
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Aula 16
Aula 16Aula 16
Aula 16
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 

Similar a Pged 05

Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopJean Martina
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptssuserd654cb1
 
Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracleharlycarreiro
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Loiane Groner
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhasRicardo Bolanho
 
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOSLIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOSOs Fantasmas !
 
Aula5 normalização
Aula5   normalizaçãoAula5   normalização
Aula5 normalizaçãoMatias Silva
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasLeinylson Fontinele
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsortFlávio Freitas
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Leinylson Fontinele
 

Similar a Pged 05 (20)

Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Pged 03
Pged 03Pged 03
Pged 03
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
UML - parte 1
UML - parte 1UML - parte 1
UML - parte 1
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 
Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracle
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOSLIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
 
Aula5 normalização
Aula5   normalizaçãoAula5   normalização
Aula5 normalização
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsort
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
 

Más de samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_vsamuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_ivsamuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iiisamuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_iisamuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_isamuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iisamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)samuelthiago
 

Más de samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 07
Java 07Java 07
Java 07
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 03
Java 03Java 03
Java 03
 
Java 02
Java 02Java 02
Java 02
 
Java 01
Java 01Java 01
Java 01
 

Pged 05

  • 1. Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados Pilhas – Fundamentos e Implementações Copyright©2010 Prof. César Rocha cesarocha@ifpb.edu.br 1
  • 2. Objetivos § Explorar os conceitos fundamentais acerca do uso de pilhas utilizando a linguagem C § Organização e implementação, características, vantagens, desvantagens, regras de utilização, operações básicas e algoritmos de implementação § Neste módulo, serão abordadas ainda as seguintes implementações: seqüencial e encadeada § Este módulo será utilizado como referência na entrega dos futuros projetos § Implementação das estruturas e algoritmos, criação das bibliotecas e práticas de laboratório 2
  • 3. Motivação § Uma das estruturas de dados mais simples é a pilha § Possivelmente, por esta razão, a pilha é uma das estrutura de dados mais utilizada em programação § A pilha vem sendo, inclusive, muito implementada pelo hardware da maioria das máquinas modernas § Lembre-se da “pilha de chamadas” de funções § Variáveis locais são empilhadas na pilha § Ao término da função, as variáveis são desempilhadas § É um TAD onde as operações de inserção e retirada são efetuadas apenas no final da estrutura 3
  • 4. Motivação § A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo § Seja na inserção ou na remoção de elementos § Assim, quando um novo elemento é introduzido na pilha, passa a ser o elemento do topo - e o único elemento que pode ser removido da pilha é o topo § Isto faz com que os elementos da pilha sejam retirados na ordem inversa à ordem em que foram introduzidos inicialmente § O primeiro que sai é o último que entrou § Estruturas tipo LIFO (last in, first out strategy) 4
  • 5. Estratégia § Podemos fazer uma analogia com uma pilha de pratos em um restaurante § Se quisermos adicionar um prato na pilha, o colocamos no topo da pilha de pratos § Para pegar um prato da pilha, retiramos o do topo § Ou ainda: um software que implemente a função UNDO (o famigerado “Crtl+Z”) § A última ação feita será a primeira a ser desfeita § Não podemos retirar qualquer ação! Segue-se a ordem! § Não podemos inserir uma ação na pilha de ações caso ela não se torne a última! 5
  • 6. Propriedades § Propriedades de uma pilha: § Existem n elementos empilhados; § E1 é o elemento base da pilha; § En é o elemento topo da pilha; § A inserção de um primeiro elemento E1 em uma pilha vazia, torna-o o último a sair da estrutura § Não se pode consultar qualquer elemento § A inserção é sempre feita acima do elemento En § A retirada é sempre feita no elemento En 6
  • 7. Tipos de pilhas § Neste estágio, estaremos trabalhando com dois tipos de pilhas: seqüenciais e encadeadas Œ Seqüencial: neste TAD, os elementos desta pilha são armazenados em endereços seqüenciais. Materializada na forma de um vetor (arranjo ou matriz). v[ ] 12 09 ... 0 1 2 ... MAX-1 Topo • Encadeada: elementos encadeados por ponteiros TPilhaEnc p* 12 09 7
  • 8. Pilhas seqüenciais Pense um pouco... § O que você acha que seria necessário para implementar uma biblioteca de um novo TAD que representasse uma pilha seqüencial? Œ um vetor de elementos (tamanho pré-definido) • uma variável que controle o topo da pilha • É preciso deslocar • É preciso deslocar Pilha Vazia ? ? ? ... ? Topo = -1 os elementos a cada os elementos a cada inserção ou remoção inserção ou remoção Insere A A ? ? ... ? Topo = 0 da pilha? Porquê? da pilha? Porquê? • Como poderíamos • Como poderíamos Insere B A B ? ... ? Topo = 1 adaptar uma lista adaptar uma lista seqüencial a uma seqüencial a uma Retira B A ? ? ... ? Topo = 0 pilha? pilha? 8
  • 9. Pilhas seqüenciais – modus operandi § Iremos implementar este novo TAD utilizando as mesmas diretrizes das listas seqüenciais (já vistas) § Teremos uma variável topo que irá servir de apoio para as inserções e remoções da pilha § E a variável posUltimo da lista seqüencial? Dá pra reaproveitar? § Mas, as regras de inserção/remoção agora irão mudar! § Algumas funções da lista seqüencial (inserir ou remover mediante uma posição, entre outras) deverão ser eliminadas neste novo TAD 9
  • 10. Operações em pilhas seqüenciais § A literatura é unânime quanto às operações básicas realizadas numa estrutura pilha seqüencial: Œ criar uma pilha vazia • verificar se uma pilha está vazia Ž verificar se uma pilha está cheia • consultar o topo da pilha (sem remover) • empilhar um novo elemento ‘ desempilhar o elemento do topo ’ exibir / imprimir os elementos de uma pilha 10
  • 11. Pilhas encadeadas § O que fazer quando o número máximo de elementos na pilha não é conhecido? § Devemos implementar a pilha usando uma estrutura de dados dinâmica (com alocação dinâmica) dinâmica § Podemos empregar os conceitos vistos nas listas simplesmente encadeadas § Porém, se memória não constitui um problema na hora do armazenamento de dados, a pilha seqüencial (com vetores) pode parecer mais simples § Até porque não há mais os deslocamentos nas inserções e remoções de elementos na lista seqüencial 11
  • 12. Pilhas encadeadas Pense mais um pouco... § O que você acha que seria necessário para implementar uma biblioteca de um novo TAD que representasse uma pilha encadeada? Œ uma struct representando um nó da pilha (dado e ponteiro para o próximo nó da pilha). • um ponteiro para o 1º nó representando a pilha • Como poderíamos • Como poderíamos P adaptar uma lista adaptar uma lista encadeada a uma pilha? encadeada a uma pilha? 12 09 • Onde será o topo da • Onde será o topo da pilha: no início ou no pilha: no início ou no topo da pilha? final da lista? final da lista? 12
  • 13. Pilhas encadeadas - modus operandi § O primeiro elemento (início) da lista encadeada irá representar o topo atual da pilha § Cada novo elemento será inserido no início da lista e, conseqüentemente, sempre que solicitado, retiramos o elemento também a partir do início da lista § Desta forma, vamos precisar de apenas duas funções auxiliares na lista: Œ uma para inserir no início (empilhar) • outra para remover do início (desempilhar) § Ambas as funções retornam o novo primeiro nó da lista (o topo) 13
  • 14. Operações em pilhas encadeadas § A literatura é unânime quanto às operações básicas realizadas numa estrutura pilha encadeada: Œ criar uma pilha vazia • verificar se uma pilha está vazia Ž verificar se uma pilha está cheia • consultar o topo da pilha (sem remover) • empilhar um novo elemento ‘ desempilhar o elemento do topo ’ exibir / imprimir os elementos de uma pilha 14
  • 15. Algoritmos em C § O que deverá ser feito pelo aluno: § Escolha e instalação do ambiente a ser trabalhado no laboratório § Modelagem deste TAD (dados e operações) § Implementação dos algoritmos de operações básicas vistos em sala de aula na linguagem C § Utilização das regras de modelagem vistas no módulo anterior (criação de bibliotecas) e modularização § Implantação de código legível e bem documentado § Nomes de variáveis condizentes com o problema § Prática de laboratório 15
  • 16. Para um bom aproveitamento: § O aluno deve identificar a relação entre TAD (biblioteca e modularização) com a implementação da lista encadeada no código! § Resolva todas as questões da prática de laboratório de pilhas sequencial e encadeadas § Procure o professor ou monitor da disciplina e questione conceitos, listas, etc. § Não deixe para codificar tudo e acumular assunto para a primeira avaliação. § Este é apenas um dos assuntos abordados na prova! 16