1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

22
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa

Transcript of 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

Page 1: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

1

Tipos Abstratos de Dados

Pilhas e FilasTPA – 2008 –1

Prof. Mateus Costa

Page 2: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

2

Pilhas

Comportamento: O último que chega é o primeiro que sai.

O comportamento da pilha pode ser especificado por 3 operações:

Empilha (push): Insere um elemento na pilhaDesempilha (pop) : remove o último

elemento que foi inserido na pilhaPilhaVazia: operação lógica: retorna

verdadeiro se não há nenhum elemento na pilha e falso caso contrário.

Page 3: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

3

Pilhas

A restrição fundamental: o elemento a ser removido é sempre o último que foi inserido Obedecendo esta regra, não importa a

estrutura de armazenamento utilizada.

Page 4: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

4

Pilhas –Implementação com Arranjos estáticos

– Considerando a implementação utilização de arranjos estáticos para a implementação de uma pilha temos que:• Deve-se definir o tipo de dado a ser armazenado na

pilha.– Exemplo: Inteiro, String, Caractere, real, Tipos definidos

pelo usuário.

• As posições do arranjo serão utilizados para o armazenamento dos dados

• Deve-se ter uma variável para indicar o topo da pilha:

– A variável deve ser do mesmo tipo do índice do arranjo Normalmente o tipo é inteiro.

• Para manter todas as informações da pilha definidas em uma única estrutura devemos definir um tipo Pilha contendo o arranjo e a variável topo.

Page 5: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

5

Pilhas –Implementação com Arranjos estáticos

0

1

2

3

4

5

topo

Pilha com um arranjo.Tamanho máximo da pilha: 6

Page 6: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

6

Pilhas –Implementação com Arranjos estáticos

• Definição do tipo para uma Pilha de inteiros#define MAX 6 // tamanho máximo da Pilha#define TRUE 1#define FALSE 0typedef int Elemento; // tipo a ser armazenadotypedef struct { int topo; Elemento itens[MAX]; } Pilha;

Page 7: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

7

Pilhas –Implementação com Arranjos estáticos

Interface do TAD Pilha:int pilhaCheia(Pilha);int pilhaVazia(Pilha);void inicializaPilha(Pilha *);void empilha (Pilha *, Elemento);Elemento desempilha (Pilha *, Elemento);Elemento mostraTopo(Pilha);

Page 8: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

8

Pilhas –Implementação com Arranjos estáticos

Implementação das operações:void inicializaPilha(Pilha *p) { p->topo=0; }

int pilhaCheia(Pilha){ if (Pilha.topo==MAX) { return TRUE; } else { return FALSE; }

Page 9: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

9

Pilhas –Implementação com Arranjos estáticos

int pilhaVazia(Pilha p) { if(p.topo==0) { return TRUE; } else { return FALSE; }}

Page 10: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

10

Pilhas –Implementação com Arranjos estáticos

void empilha (Pilha *p, Elemento ele){ if (pilhaCheia(*p)==FALSE) { p->itens[p->topo] = ele; p->topo++; } else{ fprintf(stderr, “Pilha Cheia”); } }

Page 11: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

11

Pilhas –Implementação com Arranjos estáticos

Elemento desempilha(Pilha *p) { Elemento ele = 0; if (pilhaVazia(*p)==FALSE) { p->topo--; ele = p->itens[p->topo];} else{ fprintf(stderr, MSG_PILHAVAZIA); } return ele; }

Page 12: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

12Exemplo: Pilha das Calculadoras HPTamanho 4Tipo Básico: Real

#define MAXPILHA 4#define true 1#define false 0#define MAIORIGUAL(X,Y)((X>=Y)?(true): (false)) typedef float elemento;typedef struct { int topo; elemento itens[MAXPILHA]; }Pilha;

Page 13: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

13

Exemplo: Pilha das Calculadoras HPOperações

int pilhaCheia(Pilha p);int pilhaVazia(Pilha p);void inicializaPilha(Pilha *p);void empilha (Pilha *p, elemento ele);Elemento desempilha(Pilha *p);void mostraTopo(Pilha p);

Page 14: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

14Exemplo: Pilha das Calculadoras HP:Inicializa Pilha (topo = -1) - Pilha Cheia – Pilha Vaziavoid inicializaPilha(Pilha *p) { p->topo=-1; } int pilhaCheia(Pilha p) { return MAIORIGUAL(p.topo,MAXPILHA-1);} int pilhaVazia(Pilha p) { return ((p.topo == -1) ? true : false ); }

Page 15: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

15

Exemplo: Pilha das Calculadoras HPempilha – insere um elemento na pilha

void empilha (Pilha *p, elemento ele){ if (!pilhaCheia(*p)) { p->topo++; p->itens[p->topo] = ele;

} else{ fprintf(stderr, MSG_PILHACHEIA); } }

Page 16: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

16Exemplo: Pilha das Calculadoras HPdesempilha – remove o último elemento inserido na pilhaelemento desempilha(Pilha *p) { elemento ele= 0.0; if (pilhaVazia(*p)==false) { ele = p->itens[p->topo]; p->topo--; } else{ fprintf(stderr, MSG_PILHAVAZIA); } return ele; }

Page 17: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

17Exemplo: Pilha das Calculadoras HPmostra topo – mostra o elemento que esta no topo da pilha

void mostraTopo(Pilha p){ if (pilhaVazia(p)==false) { printf("%5.2f\n", p.itens[p.topo]); } else { printf("Pilha Vazia: %5.2f\n", 0.0); } }

Page 18: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

18

Exemplo: Pilha das Calculadoras HPFuncionamento das operações aritméticas

AlgoritmoFaça { Cada valor informado é empilhado Se um operador (+,- ,*,/) é informado: A calculadora tenta desempilhar os dois

últimos valores empilhados Em caso de sucesso realiza a operação correspondente com os

valores desempilhados. O resultado da operação e empilhado. O topo da pilha é mostrado } até (desligamento)

Page 19: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

19Exemplo: Pilha das Calculadoras HPmain – implementa o algoritmo da calculadora HP

parte 1 – empilha os dígitosmain() {Pilha p1;inicializaPilha(&p1);char x;float a,b, result;char input[2];do { // loop principal: O programa permanece lendo caracteres do

teclado x = getch(); result = 0.0; if(isdigit(x)){ // se o caracter lido é um dígito empilha o mesmo printf("Empilhando %c\n", x); input[0]=x; input[1]='\0'; empilha(&p1, atof(input)); } // fim se é digito

Page 20: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

20Exemplo: Pilha das Calculadoras HPmain – implementa o algoritmo da calculadora HPparte 2 - faz operações else { //se não eh digito if (isoperator(x)){ // se eh operador if (pilhaVazia(p1) == false) { a = desempilha(&p1); if (pilhaVazia(p1) == false) { b = desempilha(&p1); result = fazOperacao(a,b,x); empilha(&p1, result); } } } } mostraTopo(p1);} while(x !='q');}

Page 21: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

21Exemplo: Pilha das Calculadoras HPmain – implementa o algoritmo da calculadora HPmacros – função faz Operaçãoisdigit(x) – Macro já definida na biblioteca padrão de Cisoperator(x) – Macro construída:#define isoperator(A) (((A == '+')||(A=='-')||(A=='*')||

(A=='/')) ? (true) : (false))

float fazOperacao(float a, float b, char op) { switch(op) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; } }

Page 22: 1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.

22

Exemplo: Pilha das Calculadoras HPExercícios - Modificações

1. Nas Calculadoras HP não ocorre pilha cheia. Se não houver mais espaço, ao inserir um novo elemento os elementos na pilha são deslocado e o elemento mais antigo é descartado. Corrija o programa dado para que tenha este comportamento.

2. Adapte o programa dado para que possam ser inseridos números com mais de um dígito.