Curso Superior de Tecnologia em Telemática                          Programação e Estruturas de DadosPilhas – Fundamentos ...
Objetivos§ Explorar os conceitos fundamentais acerca do uso  de pilhas utilizando a linguagem C   § Organização e implemen...
Motivação§ Uma das estruturas de dados mais simples é a pilha  § Possivelmente, por esta razão, a pilha é uma das    estru...
Motivação§ A idéia fundamental da pilha é que todo o acesso a  seus elementos é feito através do seu topo   § Seja na inse...
Estratégia§ Podemos fazer uma analogia com uma pilha de  pratos em um restaurante  § Se quisermos adicionar um prato na pi...
Propriedades§ Propriedades de uma pilha:   §   Existem n elementos empilhados;   §   E1 é o elemento base da pilha;   §   ...
Tipos de pilhas§ Neste estágio, estaremos trabalhando com dois  tipos de pilhas: seqüenciais e encadeadas  Œ Seqüencial: n...
Pilhas seqüenciais                    Pense um pouco...    § O que você acha que seria necessário para      implementar um...
Pilhas seqüenciais – modus operandi§ Iremos implementar este novo TAD utilizando as  mesmas diretrizes das listas seqüenci...
Operações em pilhas seqüenciais§ A literatura é unânime quanto às operações básicas  realizadas numa estrutura pilha seqüe...
Pilhas encadeadas§ O que fazer quando o número máximo de elementos  na pilha não é conhecido?   § Devemos implementar a pi...
Pilhas encadeadas                Pense mais um pouco...   § O que você acha que seria necessário para     implementar uma ...
Pilhas encadeadas - modus operandi§ O primeiro elemento (início) da lista encadeada irá  representar o topo atual da pilha...
Operações em pilhas encadeadas§ A literatura é unânime quanto às operações básicas  realizadas numa estrutura pilha encade...
Algoritmos em C§ O que deverá ser feito pelo aluno:   § Escolha e instalação do ambiente a ser trabalhado no     laboratór...
Para um bom aproveitamento:§ O aluno deve identificar a relação entre TAD  (biblioteca e modularização) com a implementaçã...
Próximos SlideShares
Carregando em…5
×

Pged 05

1.131 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.131
No SlideShare
0
A partir de incorporações
0
Número de incorporações
153
Ações
Compartilhamentos
0
Downloads
48
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Pged 05

  1. 1. Curso Superior de Tecnologia em Telemática Programação e Estruturas de DadosPilhas – Fundamentos e Implementações Copyright©2010 Prof. César Rocha cesarocha@ifpb.edu.br 1
  2. 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. 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. 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. 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. 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. 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 ponteirosTPilhaEnc p* 12 09 7
  8. 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 = -1os elementos a cada os elementos a cadainserção ou remoção inserção ou remoção Insere A A ? ? ... ? Topo = 0da pilha? Porquê? da pilha? Porquê?• Como poderíamos• Como poderíamos Insere B A B ? ... ? Topo = 1adaptar uma listaadaptar uma listaseqüencial a umaseqüencial a uma Retira B A ? ? ... ? Topo = 0pilha?pilha? 8
  9. 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. 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. 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. 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 Padaptar uma listaadaptar uma listaencadeada a uma pilha?encadeada a uma pilha? 12 09• Onde será o topo da• Onde será o topo dapilha: no início ou nopilha: no início ou no topo da pilha?final da lista?final da lista? 12
  13. 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. 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. 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. 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

×