A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa."— Transcrição da apresentação:

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

2 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 pilha Desempilha (pop) : remove o último elemento que foi inserido na pilha PilhaVazia: operação lógica: retorna verdadeiro se não há nenhum elemento na pilha e falso caso contrário.

3 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.

4 4 Exemplo: Pilha das Calculadoras HP Tamanho 4 Tipo 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;

5 5 Exemplo: Pilha das Calculadoras HP Operações int pilhaCheia(Pilha p); int pilhaVazia(Pilha p); void inicializaPilha(Pilha *p); void empilha (Pilha *p, elemento ele); void mostraTopo(Pilha p);

6 6 Exemplo: Pilha das Calculadoras HP: Inicializa Pilha (topo = -1) - Pilha Cheia – Pilha Vazia void 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 ); }

7 7 Exemplo: Pilha das Calculadoras HP empilha – 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); }

8 8 Exemplo: Pilha das Calculadoras HP desempilha – remove o último elemento inserido na pilha elemento 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; }

9 9 Exemplo: Pilha das Calculadoras HP mostra 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("PV: %5.2f\n", 0.0); }

10 10 Exemplo: Pilha das Calculadoras HP Funcionamento das operações aritméticas Algoritmo Faç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)

11 11 Exemplo: Pilha das Calculadoras HP main – implementa o algoritmo da calculadora HP parte 1 – empilha os dígitos main() { 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

12 12 Exemplo: Pilha das Calculadoras HP main – implementa o algoritmo da calculadora HP parte 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'); }

13 13 Exemplo: Pilha das Calculadoras HP main – implementa o algoritmo da calculadora HP macros – função faz Operação isdigit(x) – Macro já definida na biblioteca padrão de C isoperator(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; }

14 14 Exemplo: Pilha das Calculadoras HP Exercí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.


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

Apresentações semelhantes


Anúncios Google