Sei sulla pagina 1di 3

Utilizando exemplos prticos para explicar as Estrutura de Dados

1. Pilha a. Pilha de pratos b. Livros c. Jogo de cartas de um baralho

Operaes:

criao da pilha (informar a capacidade no caso de implementao sequencial vetor); empilhar (push) - o elemento o parmetro nesta operao; desempilhar (pop); mostrar o topo; verificar se a pilha est vazia (isEmpty); verificar se a pilha est cheia (isFull - implementao sequencial - vetor).

2. Fila a. Fila de alunos Aplicao: distncias Eis uma aplicao clssica do conceito de fila. Imagine 6 cidades numeradas de 0 a 5 e interligadas por estradas de mo nica. ( claro que voc pode trocar "6" pelo seu nmero favorito.) As ligaes entre as cidades so representadas por uma matriz A da seguinte maneira:
A[i][j]

vale 1 se existe estrada da cidade i para a cidade j

e vale 0 em caso contrrio. Suponha que a matriz tem zeros na diagonal, embora isso no seja importante. Exemplo: 0 0 1 0 0 1 0 1 0 0 1 0 0 1 2 0 0 0 1 0 0 3 0 0 0 0 0 0 4 0 0 1 1 0 0 5 0 0 0 0 0 0

0 1 2 3 4 5

A distncia de uma cidade c a uma outra j o menor nmero de estradas que devo percorrer para ir de c a j. Nosso problema: dada uma cidade c, determinar a distncia de c a cada uma das demais cidades. As distncias sero armazenadas em um vetor d: a distncia de c a j ser d[j]. Que fazer se impossvel chegar de c a j? Poderamos dizer nesse caso que d[j] infinito. Mas mais limpo e prtico dizer que d[j] vale 6, pois nenhuma distncia "real" pode ser maior que 5. Se adotarmos c igual a 3 no exemplo acima, teremos d igual a 0 1 2 3 4 5 2 2 1 0 1 6 Eis a ideia de um algoritmo que usa o conceito de fila para resolver nosso problema: b. uma cidade considerada ativa se j foi visitada mas as estradas que comeam nela ainda no foram exploradas; c. mantenha uma fila das cidades ativas; d. em cada iterao, remova da fila uma cidade i e insira na fila todas as cidades vizinhas de i que ainda no foram visitadas Implementao circular No exemplo das distncias, fcil ver que o vetor que abriga a fila no precisa ter mais componentes que o nmero total de cidades, pois cada cidade entra na fila no mximo uma vez. Em geral, entretanto, difcil prever o espao necessrio para abrigar a fila. Nesses casos, mais inteligente implementar a fila de maneira "circular", como mostraremos a seguir. Suponha que os elementos da fila esto dispostos no vetor fila[0..N-1] de uma das seguintes maneiras: fila[ini..fim-1] ou fila[ini..N-1] fila[0..fim-1] .
0 0 ini fim fim ini N-1 N-1

Teremos sempre 0 ini < N e 0 fim < N, mas no podemos supor que ini fim . A fila est

vazia se fim == ini e cheia se fim+1 == ini

ou

fim+1 == N

e ini == 0 .

(Resumindo, a fila est cheia se (fim+1) % N == ini.) A posio fim ficar sempre desocupada, para que possamos distinguir uma fila cheia de uma vazia. Para remover um elemento da fila basta fazer

x = fila[ini++]; if (ini == N) ini = 0;

claro que isso s deve ser feito se voc sabe que a fila no est vazia. Para inserir um elemento y na fila faa
if (fim + 1 == ini || fim + 1 == N && ini == 0) { printf( "\nSocorro! Fila vai transbordar!\n"); exit( EXIT_FAILURE); } fila[fim++] = y; if (fim == N) fim = 0;

O cdigo comea por verificar se a fila est cheia; se estiver, no h nada a fazer seno pedir socorro e abortar o programa. Implementao de uma fila em uma lista encadeada Utilizar aplicao da distncia 3. Lista a. Lista telefnica b.

Potrebbero piacerti anche