Universidade Federal do Ma
Pilhas e Filas
Pilhas e Filas
Pilhas e Filas
Pilhas e Filas
Operaes Bsicas:
Criar Insero push Remoo pop
Operaes Adicionais:
Primeiro EstaVazia Destruir
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
Pilhas e Filas
Pilhas e Filas
/* Retira o elemento no topo da pilha Pre-condio: (s foi criada por stkCria) && (existe pelo menos um item na pilha) Pos-condio: elemento do topo da pilha foi removido */
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
Pilhas e Filas
Pilhas e Filas
Top=5
Aps
pop
Top=4
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
Pilhas e Filas
Exemplo
Pilhas e Filas
Stack stkCria ( int max_itens); Int stkPush( Stack s, void *item ); void *stkPop( Stack s ); void *stkPrimeiro( Stack s ); int stkEstaVazia( Stack s ); int stkDestruir (Stack s); Implementar as funes
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
10
Aplicaes de Pilha
Pilhas e Filas
11
Pilhas e Filas
12
Pilhas e Filas
Verificao de Parenteses
13
Pilhas e Filas
14
Pilhas e Filas
15
Pilhas e Filas
Este raciocnio seguidamente repetido at que encontremos uma configurao sem ataques.
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
16
Preenchimento de Regies
Pilhas e Filas
17
Preenchimento de Regies
Pilhas e Filas
18
Preenchimento de Regies
Pilhas e Filas
19
Pilhas e Filas
Converso de notao
Infixa para posfixa
Pilhas e Filas
21
Pilhas e Filas
se operador, desempilha os 2
22
Pilhas e Filas
Ex.: 6 2 3 + - 3 8 2 / + * 2 ^ 3 +
23
Pilhas e Filas
24
Pilhas e Filas
Converso de infixa para posfixa
25
Pilhas e Filas
26
Pilhas e Filas
27
Pilhas e Filas
28
Pilhas e Filas
29
Pilhas e Filas
30
Pilhas e Filas
Exemplo
31
Recursividade
Tcnica muito til
Usada na definio de vrias funes matemticas
Ex:
fatorial Fibonacci Maior denominador comum de Euclides
Pilhas e Filas
32
Recurso - Exemplo
Nmeros de Fibonacci fib( n ) = if ( n = 0 ) then 1 Mtodo de Clculo else if ( n = 1 ) then 1
Implementao em C else fib(n-1) + fib(n-2)
int fib( n ) { if ( n < 2 ) return 1; else return fib(n-1) + fib(n-2); }
Pilhas e Filas
Soluo simples e elegante, mas ineficiente, No entanto, em muitos outros casos ( e.g. busca binria) soluo eficiente tambm
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
33
Aspectos da Recursividade
Todo processo recursivo:
Caso base: resolvido sem recursividade; Mtodo geral que reduz um caso particular a um ou mais casos base.
Pilhas e Filas
34
Pilhas e Filas
35
Pilhas e Filas
36
Pilhas e Filas
37
Pilhas e Filas
38
Pilhas e Filas
Coleo em que a insero feita numa extremidade e a eliminao na outra. (LIFO: last in, first out).
( a1, a2 , ..., an) eliminaes no incio inseres no final
Fila
Operaes associadas:
Criar (F) - criar uma fila F vazia Inserir (x, F) - insere x no fim de F (enqueue) Vazia (F) - testa se F est vazia Primeiro (F) - acessa o elemento do incio da fila Elimina (F) - elimina o elemento do incio da fila (dequeue)
39
40
F
Rear=5
Insere(R)
L
Front=2
R
Rear=6
Insere(G) Insere(k)
K Rear=1
L Front=2
41
/* Criar (q) - criar uma fila q vazia */ Queue *Create(int max) { Queue *q = (Queue *)malloc( sizeof(Queue)); if ( q == NULL ) return NULL; q->qArray = (void **) calloc(max, sizeof(void *)); if(q->qArray== NULL)return NULL; q->front = 0; q->rear = 0; q->maxItens = max; return q; }
Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados
42
/* ** Elimina (F) ** elimina o elemento do incio da fila */ int Dequeue (Queue *q) { if (IsEmpty(q)) { return FALSE; } else { q->front++; return TRUE; } } int IsFull( Queue *q) { if ( q->rear <q->maxItens -1 ) { return TRUE; } else { return FALSE; }
}
43
Pilhas e Filas
44
Escalonamento de Processos
Pilhas e Filas
45
Pilhas e Filas
46
Pilhas e Filas
47
Pilhas e Filas
Fila em vetor circular (Kruse, R.L. and Ryba, A. J. Data Structures and Program Design in C++, Prentice Hall, 1999)
48
Pilhas e Filas
49
Pilhas e Filas
int IsFull( Queue *q) { Typedef struct _queue_ { if ( q->numItens <q->maxItens ) int front, { rear; return FALSE; } else { int numItens; return TRUE; int maxItens; } void **qArray; } }Queue; int IsEmpty (Queue *q) Ao inserir e retirar algum item da fila { incrementa ou decrementa o nmero if ( q->numItens == 0) { return TRUE; de itens na fila( numItens), que foi } else{ inicializado com zero. return FALSE; } Prof. Anselmo C. de Paiva - DEINF-UFMA - Estrutura de Dados 50 }