Top Banner
Aula 11 Pilha Dinâmica prof Leticia Winkler 1
16

Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Dec 08, 2018

Download

Documents

dothien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Aula 11

Pilha Dinâmica

prof Leticia Winkler

1

Page 2: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Pilha Dinâmica (Dynamic Stack) Pilha implementada através

de uma lista linear encadeada.

É uma lista linear encadeada em que as operações de inserção e retirada de um elemento é realizada em uma das extremidades da lista, chamada de topo.

O topo da pilha será o início da lista Empilhar = inserir antes do

primeiro da lista Desmpilhar = remover o

primeiro da lista

Prof. Leticia Winkler 2

Topo

Topo

Page 3: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Operações com uma Pilha Dinâmica Criação da pilha

Declarar o ponteiro para o topo da pilha

Inicialização da pilha determina o status inicial da pilha, a fim de prepará-la para a

inserção de dados. Ponteiro para o topo é NULL – aponta para nada

Empilhamento consiste em inserir um valor no topo da pilha (início da lista).

Verificar se a pilha está vazia Caracterizada pelo ponteiro para topo estar com NULL.

Desempilhamento consiste em retirar um valor do topo da pilha. É preciso verificar

previamente se a pilha está vazia.

Mostrar o topo

Prof. Leticia Winkler 3

Page 4: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de verificar se a pilha

está cheia, pois o limite na inserção de dados, está na capacidade do computador

Uma das vantagens da pilha dinâmica sobre a estática (sequencial – implementada com vetor) é não ter limite de sua capacidade. Outra vantagem: como os nós são alocados a medida que são necessários, a pilha dinâmica só usa o espaço realmente necessário.

O código das operções em pilha estática é mais simples que na dinâmica.

As aplicações para a pilha dinâmica são as mesmas da pilha estática.

Prof. Leticia Winkler 4

Page 5: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Criar a pilha Supondo a descrição de um nó:

struct no {

int dado;

struct no *prox;

};

Criar a pilha é declarar o ponteiro para o topo:

no *topo;

Prof. Leticia Winkler 5

Page 6: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Inicializar a Pilha Determina o status inicial da pilha, a fim de prepará-la

para a inserção de dados.

Inicialmente o ponteiro para o topo não aponta para nada:

topo = NULL;

Prof. Leticia Winkler 6

topo

Page 7: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Empilhar (Push) Consiste em inserir um valor no

topo da pilha.

Cria-se um novo nó

Novo nó aponta para o nó para o qual o topo aponta

topo aponta para o novo nó

Prof. Leticia Winkler 7

topo

topo

topo

novo

novo

Page 8: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Empilhar (Push) Cria-se um novo nó

Novo nó aponta para o nó para o qual o topo aponta

topo aponta para o novo nó

Prof. Leticia Winkler 8

topo

novo

topo

novo

topo

novo

Page 9: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Código para Empilhar // cria um novo no no *novo = new no; cout << "Valor? "; cin >> valor; novo->dado = valor; novo->prox = NULL; // inserindo no topo da pilha if (topo != NULL) { novo->prox = topo; } topo = novo;

Prof. Leticia Winkler 9

Page 10: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Verificar se a Pilha está Vazia A pilha estará vazia, quando o ponteiro para o topo

estiver apontando para nada (estiver aterrado)

Prof. Leticia Winkler 10

Page 11: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Código para Verificar se a Pilha está Vazia if (topo == NULL) {

cout << "\n\nPilha vazia!!!\n\n";

}

Prof. Leticia Winkler 11

Page 12: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Desempilhar (Pop) Consiste em remover um valor do topo da pilha.

Prof. Leticia Winkler

Topo

Page 13: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Desempilhar (Pop) O ponteiro que indica o topo irá apontar para o

próximo do topo;

Antigo topo deve ser removido

Prof. Leticia Winkler 13

topo

Page 14: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Código para Desempilhar // testa se a pilha está vazia

if (topo == NULL) {

cout << "\nPilha vazia!!!\n\n";

}

else {

no *aux; // ponteiro auxiliar

aux = topo; // ponteiro auxiliar aponta para nó a ser removido

topo = topo->prox; // topo aponta para nó apontado pelo topo

cout << "\n\n" << aux->dado << " removido com sucesso\n";

delete aux; // libera a área de memória alocada pelo nó removido

}

Prof. Leticia Winkler 14

Page 15: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Mostrar o Topo Deve-se verificar se existem elementos na pilha (ou seja, se

a pilha não está vazia)

Numa pilha convencional só se pode vizualizar os dados do elemento que esta no topo (no exemplo o 10)

Prof. Leticia Winkler 15

10

30

20

topo

Page 16: Aula 11 Pilha Dinâmica prof Leticia Winkler - lncc.brlncc.br/~rogerio/ed/11 - Pilha Dinamica.pdf · Observações sobre Pilha Dinâmica Na pilha dinâmica não há necessidade de

Código para Mostrar o topo // verifica se a pilha está vazia

if (topo == NULL) {

cout << "\n\nPilha vazia!!!\n\n";

}

else {

// mostra os dados do topo

cout << "\n\nTopo: " << topo->dado << endl;

}

Prof. Leticia Winkler 16