PilhasEncadeadas
Estruturas de Dados I
Universidade Luterana do Brasil
Prof Fabiana Lorenzi
PilhasEncadeadas
● LIFO - Last in first out
● O último a entrar é o primeiro a sair
● Dentre os elementos que ainda permanecem no conjunto, o
primeiro elemento a ser retirado é o último que foi
inserido.
2
Exemplodepilhas
3
ExercícioTorredeHanoi
Suponha 3 pilhas sequenciais de 4 posições…
Escreva a sequência de comandos push e pop necessários para
passar todos os elementos da pilha P1 para a pilha P3 (na
mesma ordem), considerando a ordem de precedência das letras
no alfabeto, ou seja, a letra "A" não pode ficar abaixo da
letra "B" e somente um elemento pode ser passado por vez.
4
ExercícioTorredeHanoi
Suponha 3 pilhas sequenciais de 4 posições…
Escreva a sequência de comandos push e pop necessários para
passar todos os elementos da pilha P1 para a pilha P3 (na
mesma ordem), considerando a ordem de precedência das letras
no alfabeto, ou seja, a letra "A" não pode ficar abaixo da
letra "B" e somente um elemento pode ser passado por vez.
5
Operaçõespossíveisemumapilha
Como o acesso a uma pilha somente é realizado através do
TOPO, a pilha permite apenas DUAS operações:
EMPILHAR (PUSH) - Push(Pilha, valor)
(inserir um novo elemento no topo da pilha).
DESEMPILHAR (POP) - Pop(Pilha)
(remover o elemento do topo da pilha).
6
Pilhasencadeadas
Registro tpilha
inteiro dado
registro tpilha *próximo
fim
7
Empilhar(Push)-Pilhasencadeadas
procedimento push (ref registro tpilha *topo; inteiro valor;
ref inteiro sinal)
início
registro tpilha *p;
aloca (p);
se (p = nulo) { erro de alocação }
então
sinal = 0
senão início
p->dado = valor
p->próximo = topo
topo = p
sinal = 1
fim;
fim;
8
Empilhar(Push)-emC
void push (struct tpilha **topo, int valor, int *status)
{
struct tpilha *p;
p = (struct tpilha *) malloc (sizeof(struct tpilha));
if (p == NULL)
*status = 0;
else{
p->dados = valor;
p->proximo = *topo;
*topo = p;
*status = 1;
}
}
9
Desempilhar(Pop)-Pilhasencadeadas
Função pop (ref registro tpilha *topo; ref inteiro sinal)
início
inteiro valor=0;
registro tpilha *p;
se (topo = nulo)
então
sinal = 0
senão início
valor = topo->dado
p = topo
topo = p->proximo
libera (p)
sinal = 1
fim;
retorna valor;
fim;
10
Desempilhar(Pop)-emC
int pop (struct tpilha **topo, int *status)
{
int valor;
struct tpilha *p;
if (*topo == NULL)
*status = 0;
else {
valor = (*topo)->dados;
p = *topo;
*topo = p->proximo;
free(p);
*status = 1;
}
return valor;
}
11
Exercícios
1) Escreva um procedimento que recebe duas pilhas formadas
por valores numéricos ordenados (no topo das pilhas estão
os menores valores de cada uma delas). O procedimento
deverá montar uma nova pilha na qual estarão os valores
das pilhas recebidas, ordenados. Na pilha resultante,
entretanto, os maiores valores deverão estar no topo.
12

Pilhas encadeadas

  • 1.
    PilhasEncadeadas Estruturas de DadosI Universidade Luterana do Brasil Prof Fabiana Lorenzi
  • 2.
    PilhasEncadeadas ● LIFO -Last in first out ● O último a entrar é o primeiro a sair ● Dentre os elementos que ainda permanecem no conjunto, o primeiro elemento a ser retirado é o último que foi inserido. 2
  • 3.
  • 4.
    ExercícioTorredeHanoi Suponha 3 pilhassequenciais de 4 posições… Escreva a sequência de comandos push e pop necessários para passar todos os elementos da pilha P1 para a pilha P3 (na mesma ordem), considerando a ordem de precedência das letras no alfabeto, ou seja, a letra "A" não pode ficar abaixo da letra "B" e somente um elemento pode ser passado por vez. 4
  • 5.
    ExercícioTorredeHanoi Suponha 3 pilhassequenciais de 4 posições… Escreva a sequência de comandos push e pop necessários para passar todos os elementos da pilha P1 para a pilha P3 (na mesma ordem), considerando a ordem de precedência das letras no alfabeto, ou seja, a letra "A" não pode ficar abaixo da letra "B" e somente um elemento pode ser passado por vez. 5
  • 6.
    Operaçõespossíveisemumapilha Como o acessoa uma pilha somente é realizado através do TOPO, a pilha permite apenas DUAS operações: EMPILHAR (PUSH) - Push(Pilha, valor) (inserir um novo elemento no topo da pilha). DESEMPILHAR (POP) - Pop(Pilha) (remover o elemento do topo da pilha). 6
  • 7.
  • 8.
    Empilhar(Push)-Pilhasencadeadas procedimento push (refregistro tpilha *topo; inteiro valor; ref inteiro sinal) início registro tpilha *p; aloca (p); se (p = nulo) { erro de alocação } então sinal = 0 senão início p->dado = valor p->próximo = topo topo = p sinal = 1 fim; fim; 8
  • 9.
    Empilhar(Push)-emC void push (structtpilha **topo, int valor, int *status) { struct tpilha *p; p = (struct tpilha *) malloc (sizeof(struct tpilha)); if (p == NULL) *status = 0; else{ p->dados = valor; p->proximo = *topo; *topo = p; *status = 1; } } 9
  • 10.
    Desempilhar(Pop)-Pilhasencadeadas Função pop (refregistro tpilha *topo; ref inteiro sinal) início inteiro valor=0; registro tpilha *p; se (topo = nulo) então sinal = 0 senão início valor = topo->dado p = topo topo = p->proximo libera (p) sinal = 1 fim; retorna valor; fim; 10
  • 11.
    Desempilhar(Pop)-emC int pop (structtpilha **topo, int *status) { int valor; struct tpilha *p; if (*topo == NULL) *status = 0; else { valor = (*topo)->dados; p = *topo; *topo = p->proximo; free(p); *status = 1; } return valor; } 11
  • 12.
    Exercícios 1) Escreva umprocedimento que recebe duas pilhas formadas por valores numéricos ordenados (no topo das pilhas estão os menores valores de cada uma delas). O procedimento deverá montar uma nova pilha na qual estarão os valores das pilhas recebidas, ordenados. Na pilha resultante, entretanto, os maiores valores deverão estar no topo. 12