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

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

Tipos Abstratos de Dados

Apresentações semelhantes


Apresentação em tema: "Tipos Abstratos de Dados"— Transcrição da apresentação:

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 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 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 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 Pilhas –Implementação com Arranjos estáticos
Pilha com um arranjo. Tamanho máximo da pilha: 6 5 4 3 2 1 topo

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 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 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 Pilhas –Implementação com Arranjos estáticos
int pilhaVazia(Pilha p) { if(p.topo==0) { return TRUE; } else { return FALSE;

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 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 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 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 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 void empilha (Pilha *p, elemento ele){ if (!pilhaCheia(*p)) {
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 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 void mostraTopo(Pilha p){ if (pilhaVazia(p)==false) {
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 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 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 else { //se não eh digito
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); b = desempilha(&p1); result = fazOperacao(a,b,x); empilha(&p1, result); } mostraTopo(p1); } while(x !='q');

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 Exemplo: Pilha das Calculadoras HP Exercícios - Modificações
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 "Tipos Abstratos de Dados"

Apresentações semelhantes


Anúncios Google