0% acharam este documento útil (0 voto)
42 visualizações27 páginas

ED 07 - Pilha

Enviado por

owencontafake
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
42 visualizações27 páginas

ED 07 - Pilha

Enviado por

owencontafake
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 27

ESTRUTURA DE DADOS

AULA 07 – PILHA
(CASO ESPECIAL DA LISTA SIMPLESMENTE
ENCADEADA)
PILHA: INFORMAÇÕES GERAIS
o As listas admitem inserção, consulta e remoção de nós em
qualquer posição.
o Pilhas são casos especiais das listas simplesmente encadeadas.
o Cada elemento dessa lista especializada só consegue “ver” o
próximo elemento, por meio do campo ponteiro que guarda o
endereço do próximo elemento, ou seja, cada elemento (nó) da
lista conhece/aponta para o próximo.
o Não se tem acesso direto aos elementos, logo este acesso deve
ser sequencial, partindo-se do primeiro elemento;
o Dependendo das operações, é necessária a criação de ponteiros
adicionais para a realização dessas operações.
PILHA: INFORMAÇÕES GERAIS
o Características das Pilhas:
1. só admitem acessos e manipulações em uma única extremidade;
2. possuem regras rigorosas para realizar um conjunto de operações de
inserção, remoção e acesso aos elementos nelas contidos.
3. as operações de recuperação (inserção ou remoção) de elementos
nesses casos especiais são destrutivas, ou seja, para se alcançar dados
intermediários nestas estruturas, é necessário destruir
sequencialmente os dados anteriores.
o As operações sobre estas estruturas de dados são:
o criar pilha;
o Inserir elemento;
o Remover elemento;
o exibir elementos da pilha.
PILHA: REPRESENTAÇÃO DAS OPERAÇÕES
o Os endereços em uma pilha encadeada não estão consecutivamente
organizados na memória, pois cada elemento da pilha foi alocado
dinamicamente em instantes de tempo diferentes.

A pilha é a estrutura de dados mais utilizada em


programação, sendo inclusive implementada diretamente
pelo hardware da maioria das máquina modernas.
PILHA: CONCEITO E CARACTERÍSTICAS
o Conceito:
o É uma lista linear que cresce ou diminui à medida que as inserções e
remoções são realizados em um único extremo (topo).
o Restrições:
o As operações de inserção, remoção e acesso são efetuadas apenas no
topo.
o A consulta é feita desempilhando nó a nó, até encontrar o elemento
desejado ou chegar no final da pilha.
o Composição:
o Mantem-se um ponteiro, marcando o início da pilha;
o Cada elemento é representado por uma struct com, minimamente, 2
campos: um do elemento desejado e outro de ponteiro (para realizar a
ligação com o elemento seguinte).
PILHA: CONCEITO E CARACTERÍSTICAS
o Comportamento:
o Por estas características são também denominadas listas LIFO
(Last-In/First-Out, último que entra/ primeiro que sai).
o Os elementos da pilha são retirados na ordem inversa à ordem
em que foram introduzidos.
o A inserção de um novo nó “X” o torna o topo da pilha.
o A ideia fundamental da pilha é que todo o acesso a seus
elementos é feito pelo seu topo.
o A inserção de um nó na Pilha é uma operação de empilhamento
é chamada push. E, a remoção de um nó é uma operação de
desempilhamento chamada pop (só pode ser realizada quando a
pilha não é vazia).
PILHA: CONCEITO E CARACTERÍSTICAS
o Aplicações e exemplos:
o retirada de vagões de um trem;
o retirada de mercadorias em um caminhão de entregas;
o conversão de um nº na base 10 para outra base numérica;
o Funções recursivas em compiladores;
o Mecanismos de desfazer/refazer em editores de texto, planilha
etc.;
o Navegação entre páginas Web.
o Aplicações que utilizam recursividade...
Pilha (Stack): 8
Pilha (stack): 9
Pilha (stack): 10
PILHA (STACK): OPERAÇÕES
o As operações básicas são:
1. Criar/Inicializar - é definir uma pilha vazia (apta a ser utilizada);
2. Destruir a pilha;
3. Verificar se a pilha é ou não vazia;
4. Inserir um nó no topo da pilha (push);
5. Retirar o nó que está no topo - só pode ser feita, quando a pilha
não é vazia (pop).
6. Consultar o início da pilha (caso não seja vazia).
PILHA (STACK): ANTES DE TUDO...1º PASSO
o Definição da estrutura padrão:

o Esta é uma definição de estrutura mínima, onde:


o valor: é o campo que guarda a informação desejada;
o prox: é o campo ponteiro que faz a ligação com o elemento
seguinte.
PILHA (STACK): CRIAR/INICIALIZAR
o Significa que a pilha está vazia, logo não há elementos e o ponteiro
topo aponta para NULL.
1. Criar um ponteiro para o topo/inicio da pilha;
2. Esse ponteiro deve ser inicializado com NULL.
o A pilha também pode ser:
o “sem cabeça”: os ponteiros não sofrem malloc;
o “com cabeça”. Os ponteiros sofrem malloc();
“sem cabeça” “com cabeça”
o Pilha (Stack): Operação de criação 14
o “Sem cabeça”

o “Com cabeça”:
PILHA (STACK): SE ESTÁ OU NÃO VAZIA
o Muitas operações na pilha dependem da verificação se ela está vazia
ou não, pois isto impacta diretamente em como a operação desejada
será realizada.
o “Sem cabeça”:
o Verifica se o ponteiro topo aponta para NULL.

o “Com cabeça”: se o campo prox do ponteiro topo aponta para NULL.


PILHA (STACK): ACESSAR O TOPO
o Lembre-se que existe diferença entre “sem cabeça” e “com cabeça”.
1. verificar ser a pilha não é vazia;
2. acessar o elemento do inicio/topo da pilha.
PILHA (STACK): ALTERAR O TOPO
o Lembre-se que existe diferença entre “sem cabeça” e “com cabeça”.
o Passo-a-passo:
1. verificar ser a pilha não é vazia;
2. acessar o elemento do inicio/topo da fila e alterar o campo desejado.
PILHA (STACK): INSERIR NO TOPO (PUSH)
1. É necessário, um ponteiro adicional além dos ponteiro topo;
2. O ponteiro novo servirá para criar o novo nó que será inserido na pilha e
deve sofrer uma alocação dinâmica de memória;
3. Se a pilha está vazia, o topo apontará para novo nó;
4. Se a pilha não está vazia o campo prox do ponteiro novo recebe topo e,
desta forma, apontará para o primeiro elemento;
5. o ponteiro topo deve apontar para novo.
Pilha (stack): inserir no topo (push)

19
PILHA (STACK): REMOVER DO TOPO
o Toda operação de remoção é delicada, pois a intenção é excluir somente
o referido elemento/nó.
o Em geral, em operações de remoção, deve-se antes “ligar” o ponteiro ao
elemento seguinte, para que os demais elementos, dependentes do
elemento a ser removido, não sejam perdidos também.
o Em remoção, há necessariamente a utilização da função free().
o Passo-a-passo:
1. Verifica se a pilha não está vazia;
2. Criar um ponteiro adicional aux (auxiliar);
3. O ponteiro aux aponta para o elemento que está no do topo da pilha;
4. o ponteiro topo recebe o campo prox de aux ou topo, que é endereço do
próximo elemento (após a exclusão passará a ser o primeiro);
5. liberar a memória apontada por aux e aux recebe NULL.
Pilha (Stack): operação remover nó no início

21

Quando a pilha tem um


único nó, o topo, após a
remoção, deve apontar
para NULL.
PILHA (STACK): DESTRUIR A PILHA (REMOVER
TODOS OS NÓS)
o Neste caso, a ideia é fazer sucessivas remoções do topo da pilha,
até que não haja mais nenhum elemento e ela esteja vazia.
o Passo-a-passo:
1. Adicionar um ponteiro aux;
2. O ponteiro aux deve para apontar para o 1º nó;
3. Enquanto a pilha não for vazia, fazer: aux apontar para o
elemento que está no topo, o topo deve apontar para o próximo
nó e liberar ponteiro aux.
4. Ao final, topo deve apontar para NULL.
Pilha (Stack) – Operação apagar pilha (destruir)

23
Pilha (Stack) – Operação apagar pilha (destruir)

24
PRIMEIROS PASSOS...

Realize cada uma das operações descritas na 1ª coluna e, para cada uma, descreva o
estado da pilha (2ª coluna), até obter o resultado final da pilha. Considere que topo
da pilha está à direita.
PRIMEIROS PASSOS:

Fazer um programa completo em linguagem C que implemente as operações


básicas de uma pilha:
1º :
Criar fila;
2º :
Inserir nó;
3º :
Remover nó;
4º :
Acessar o topo;
5º :
Destruir a pilha.
DESAFIOS...
Faça um programa em linguagem C, que implemente uma pilha
dinâmica para a seguinte situação:

Um conjunto de informações será informado pelo usuário em tempo de


execução. Estas informações referem-se a uma pesquisa de campo sobre a
satisfação dos usuários com o sistema de transporte público de uma cidade.
Os dados referem-se ao índice de satisfação que varia de 1 a 5, onde 1 –
Totalmente insatisfeito e 5 – Totalmente satisfeito. Não se conhece
previamente a quantidade de participantes, pois a pesquisa será realizada
durante dois dias. Deseja-se sabe a opinião vencedora. Entretanto, uma vez
que o valor é processado este deve ser removido para que o elemento
seguinte possa ser processado e assim sucessivamente.

Você também pode gostar