aula 5 e 6 pilhas e suas aplicações prof leticia winklerrogerio/ed/05e06 - pilhas e suas...

30
Aula 5 e 6 Pilhas e suas Aplicações prof Leticia Winkler 1

Upload: buidang

Post on 22-Nov-2018

233 views

Category:

Documents


2 download

TRANSCRIPT

Aula 5 e 6

Pilhas e suas Aplicações

prof Leticia Winkler

1

Definição de Pilha (Stack) São estruturas de dados do tipo LIFO (last-in first-out) - o

último elemento a ser inserido, será o primeiro a ser retirado.

A manipulação dos elementos é dada apenas por uma das extremidades da lista - topo

Para processar o penúltimo item inserido, deve-se remover o último.

Exemplos de pilhas são: pilha de pratos, pilha de livros, pilha de cartas de um baralho, etc.

Prof. Leticia Winkler 2

Observações sobre Pilha Na implementação de pilha,

em apenas uma das extremidades, chamada de topo, é realizada a manipulação dos elementos, em oposição a outra extremidade, chamada de base.

Todas as operações em uma pilha podem ser imaginadas como as que ocorre numa pilha de pratos em um restaurante ou como num jogo com as cartas de um baralho

Prof. Leticia Winkler 3

e1

e2

e3

e4

e5

empilhar desempilhar

Topo

Base

Operações com Pilha Criação da pilha

informar a capacidade no caso de pilha por contiguidade (usando vetor);

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

de dados.

Verificar se a pilha está cheia (no caso de pilha por contiguidade) Empilhamento

consiste em inserir um valor no topo da pilha. É preciso verificar previamente se a pilha está cheia.

Verificar se a pilha está vazia Desempilhamento

consiste em retirar um valor do topo da pilha. É preciso verificar previamente se a pilha está vazia.

Mostrar o topo

Prof. Leticia Winkler 4

Aplicações Usa-se pilha em aplicações em que os dados são

obtidos na ordem inversa àquela em que foram fornecidos.

Exemplos:

Calculadora para expressões matemáticas;

Conversão de número decimal para binário;

Retirada de mercadorias de um caminhão de entregas;

Mecanismo de fazer/desfazer do Word;

Mecanismo de navegação de páginas na Internet (avançar e retornar).

Prof. Leticia Winkler 5

Criar a Pilha Supondo uma pilha com capacidade para 5 valores

inteiros (5 nós). #define TAM 5 ou int const tam = 5;

int pilha[TAM]; // pilha propriamente dita ou int pilha[5];

int topo;

Prof. Leticia Winkler 6

0

1

2

3

4

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

para a inserção de dados.

Na main:

topo = -1;

Prof. Leticia Winkler 7

0

1

2

3

4

Empilhar (Push) Consiste em inserir um valor no topo da pilha, desde que a

pilha não esteja cheia.

Atualiza a posição do topo.; e

Atribui o valor a ser inserido no novo topo

Parâmetros:

vetor de elementos;

topo da pilha; e

valor a ser empilhado (inserido)

Retorno: Não há

Empilhar o 10

Prof. Leticia Winkler 8

10 0

1

2

3

4

Empilhar: 10

topo 0

1

2

3

4

topo

Atualiza o topo

Empilhar Empilhar 25

Prof. Leticia Winkler 9

10

25

0

1

2

3

4

Insere o 25

topo

10 0

1

2

3

4

Atulaliza o topo

topo

Empilhar Empilhar 32

Empilhar 30

Prof. Leticia Winkler 10

10

25

32

0

1

2

3

4

Empilhar: 32

topo

10

25

32

30

0

1

2

3

4

Empilhar: 30

topo

Código da Função Empilhar void push(int p[], int valor, int &t, int capacidade) { if (capacidade-1 == t) // Testa se a Pilha está cheia cout << "ERRO: Pilha cheia."; else { t++; p[t] = valor; } }

Chamada :

push(pilha,valor,topo,tamanho);

Prof. Leticia Winkler 11

Desempilhar (Pop) Consiste em retirar um valor do topo da pilha e em

seguida, ajustar o topo.

Só é possível se a pilha não estiver vazia.

Parâmetros : vetor de elementos, topo da pilha e valor para armazenar o dado desempilhado.

Prof. Leticia Winkler 12

Desempilhar Na realidade a remoção de um elemento da pilha é

realizada apenas alterando-se a informação da posição do topo.

Prof. Leticia Winkler 13

10

25

32

30

0

1

2

3

4

Desempilhar

topo

Código da Função Desempilhar void pop(int p[], int &t) {

if (t == -1) { // Testa se a Pilha está vazia

cout << "ERRO : Pilha vazia." << endl;

return ; // Abandona a função

}

t--; // atualiza o topo

}

Chamada :

pop(pilha, topo);

Prof. Leticia Winkler 14

Outras Operações Verificar se a pilha está cheia – verifica a posição do

topo

bool isFull (int p[], int &t, int capacidade) {

return (t == capacidade - 1);

}

Verificar se a pilha está vazia – verifica a posição do topo

bool isEmpty (int p[], int &t) {

return (t == -1) ;

}

Prof. Leticia Winkler 15

http://www.cosc.canterbury.ac.nz/mukundan/dsal/StackAppl.html

Prof. Leticia Winkler 16

Questões de Concurso

Prof. Leticia Winkler 17

Questão #1 Prova: FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação

Pilha é uma estrutura de dados a) cujo acesso aos seus elementos segue tanto a lógica LIFO quanto a FIFO.

b) cujo acesso aos seus elementos ocorre de forma aleatória.

c) que pode ser implementada somente por meio de vetores.

d) que pode ser implementada somente por meio de listas.

e) cujo acesso aos seus elementos segue a lógica LIFO, apenas.

Prof. Leticia Winkler 18

Questão #2 CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE CUIABÁ – MT.

As pilhas são estruturas de dados que possuem critérios para inclusão e remoção de nodos. Sendo assim, analise o trecho do código abaixo considerando os conceitos de pilhas e a linguagem de programação C.

1. #define fim 8 2. #define inicio 0 3. void pop (int p[10], int *fim, int val, int *status) 4. { 5. if (*fim == inicio – 1) { 6. *status = 0; 7. } 8. else { 9. val = p[*fim]; 10. (*fim) --; 11. *status = 1; 12. } 13. return val; 14. } Assinale a alternativa incorreta é: a) A função pop desempilha o vetor através do comando contido na linha 10. b) A variável status recebe o valor 0 quando a pilha estiver vazia. c) A função pop é uma implementação de remoção de nodos de uma estrutura LIFO. d) Um elemento contido na pilha só poderá ser retirado se estiver no topo. e) Se a variável “fim” valer 10, a função pop irá retornar ao valor contido no topo da pilha.

Prof. Leticia Winkler 19

Questão #3 ...

int stack[10];

int top = -1;

int item1 = 1;

int item2 = 0;

int item3 = 4;

push(stack, top, item2);

push(stack, top, item1);

push(stack, top, item1 + item3);

item2 = peek(stack, top);

push(stack, top, item3 * item3);

push(stack, top, item2);

push(stack, top, 3);

item2 = peek(stack, top);

pop(stack, top);

while (!isEmpty(stack)) {

item1 = pop(stack, top);

cout << item1;

}...

Observe o trecho de código ao lado: Stack é uma estrutura do tipo LIFO (última a entrar, primeira a sair) onde são aplicadas as operações usuais push( ) e pop( ). Existe ainda a operação peek( ) que retorna o elemento no topo da pilha sem removê-lo. A seqüência de valores impressa pelo programa é: (A) 5, 16, 1 (B) 4, 16, 4, 0, 1 (C) 5, 8, 5, 1, 0 (D) 5, 16, 5, 1, 0 (E) 4, 0, 4, 4, 1

Prof. Leticia Winkler 20

BNDS – Analista de Sistemas (Desenvolvimento) – 2005 -

Questão #4 ...

Stack pilha;

...

push(&pilha, 3);

push(&pilha, 4);

pop(&pilha);

push(&pilha, 5);

push(&pilha, 6);

pop(&pilha);

push(&pilha, 7);

push(&pilha, 8);

while (true) {

cout << pop(&pilha ) << ” “;

}...

A saída produzida pelo programa ao lado será:

A) 8 7 5 3;

B) 5 6 7 8;

C) 3 4 5 6 7 8;

D) 8 7 6 5 4 3;

E) 8 7 6 5.

Prof. Leticia Winkler 21

Eletronorte – Analista de Sistema – 2005

Questão #5 Quadro I – operações básicas operação significado Push(P,x) insere um elemento qualquer x na

pilha Pop(P) remove o elemento de topo da pilha Top(P) acessa, sem remover, o elemento de topo

da pilha P Quadro II – sequência de operações Push(POLICIAL_CIVIL, HARDWARE) Push(POLICIAL_CIVIL, SOFTWARE) POP(POLICIA_CIVIL) Push(POLICIAL_CIVIL, INTERNET) TOP(POLICIA_CIVIL) Push(POLICIA_CIVIL, SEGURANCA) POP(POLICIA_CIVIL) Push(POLICIA_CIVIL, TOP(POLICIA_CIVIL)) Push(POLICIAL_CIVIL, POP(POLICIAL_CIVIL)) Push(POLICIAL_CIVIL, REDES) POP(POLICIA_CIVIL) Push(POLICIA_CIVIL, TOP(POLICIA_CIVIL))

Considere a estrutura de dados PILHA, inicialmente vazia, suportando três operações básicas, conforme definidas no Quadro I e a sequência de operações descritas no Quadro II.

Após a execução da última operação Push(POLICIA_CIVIL,TOP(POLICIA_CIVIL)), o elemento de topo da pilha será igual a: (A) REDES. (B) INTERNET. (C) SOFTWARE. (D) SEGURANCA. (E) CRIPTOGRAFIA.

Prof. Leticia Winkler 22

Perito Criminal da Polícia Civil do Estado do Rio de Janeiro – Engenharia da Computação e Informática – 2008

Questão #6 VUNESP - 2009 - CETESB - Analista de TI - Sistemas

A estrutura de dados do tipo pilha (stack) é um tipo abstrato de dado baseada no princípio

a) da indiferença.

b) da localidade de referência.

c) de dividir para conquistar.

d) First In First Out (FIFO).

e) Last In First Out (LIFO).

Prof. Leticia Winkler 23

Questão #7 UFF - 2009 - UFF - Técnico de Laboratório – Informática

Na estrutura de dados tipo pilha, há duas operações básicas para empilhamento e desempilhamento. Essas operações são conhecidas como:

a) PUSH e PULL;

b) PULL e POP;

c) HEAP e POP;

d) Base e Topo;

e) PUSH e POP.

Prof. Leticia Winkler 24

Questão #8 CESGRANRIO - 2009 - BNDES - Profissional Básico - Análise de Sistemas - Desenvolvimento

Seja S uma pilha inicialmente vazia. Primeiramente, o elemento A é inserido em S. Em seguida, o elemento B, e assim por diante, até a inclusão final do elemento E. Ao término dessas operações, qual elemento estará no topo de S?

a) A.

b) B.

c) C.

d) D.

e) E

Prof. Leticia Winkler 25

Questão #9 ESAF - 2010 - MPOG - Analista de Planejamento e Orçamento - Tecnologia da Informação

No contexto de estrutura de dados, uma pilha é

a) uma lista do tipo LILO.

b) uma lista do tipo FIFO.

c) um tipo de lista linear em que as operações de inserção e remoção são realizadas na extremidade denominada topo.

d) um tipo de lista linear em que as operações de inserção e remoção são realizadas aleatoriamente.

e) um tipo de lista linear em que as operações de inserção são realizadas em uma extremidade e as operações de remoção são realizadas em outra extremidade.

Prof. Leticia Winkler 26

Questão #10 A tabela abaixo mostra as operações para a manipulação de uma pilha.

Utilizando as definições, a seqüência de instruções ao lado foi implementada para avaliar o resultado de uma expressão, sendo A, B, C, D e E os operandos desta expressão. O resultado da avaliação é acumulado em F.

PUSH A

PUSH B

SUB

PUSH C

PUSH D

PUSH E

MPY

ADD

DEC

DIV

POP F

Com base no que foi exposto acima, se A, B, C, D e E apresentarem, respectivamente, os valores 9, 3, 2, 1 e 1, qual o valor armazenado em F após a execução da instrução POP F?.

a) 2 b) 3 c) 4 d) 5 e) 6

Prof. Leticia Winkler 27

CESGRANRIO - 2006 - EPE - Técnico de Nível Superior - Área Tecnologia da Informação

Prof. Leticia Winkler 28

Respostas: Q1) E

Q2) E

Q3) D

Q4) A

Q5) B

Q6) E

Q7) E

Q8) E

Q9) C

Q10) B

Prof. Leticia Winkler 29

Exercícios 1) Faça um programa em C++ para ler um número inteiro maior que zero, converter este número de decimal para binário, usando pilha e apresentar na tela, o resultado da conversão.

2) Construa um programa em C++ para ler um vetor de caracteres, empilhar os caracteres que são letras em uma pilha P1 e empilhar os que são dígitos em outra pilha P2. Ao final, desempilhe os dados de P2 e em seguida, os de P1, imprimindo-os na tela.

DICA : Use as funções isdigit e isalpha declaradas em cctype.

Prof. Leticia Winkler 30