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

5 5 Pilhas –Implementação com Arranjos estáticos topo Pilha com um arranjo. Tamanho máximo da pilha: 6

6 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 0 typedef int Elemento; // tipo a ser armazenado typedef struct { int topo; Elemento itens[MAX]; } Pilha;

7 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);

8 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; }

9 9 Pilhas –Implementação com Arranjos estáticos int pilhaVazia(Pilha p) { if(p.topo==0) { return TRUE; } else { return FALSE; }

10 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); }

11 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; }

12 12 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;

13 13 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); Elemento desempilha(Pilha *p); void mostraTopo(Pilha p);

14 14 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 ); }

15 15 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); }

16 16 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; }

17 17 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("Pilha Vazia: %5.2f\n", 0.0); }

18 18 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)

19 19 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

20 20 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'); }

21 21 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; }

22 22 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