Você está na página 1de 5

ALGORITMOS E ESTRUTURA DE DADOS II Prof.

Jos Gonalves Dias Neto

LISTAS, FILAS E PILHAS.


LISTA: uma coleo de dados do mesmo tipo unidos em uma mesma estrutura, a qual pode ser criada de duas formas diferentes, com utilizao de alocao esttica (matriz) ou alocao dinmica (Lista encadeada). O tipo lista permite efetuar uma srie de aes como: insero e remoo de elementos no inicio, meio ou fim da estrutura; Ordenao de elementos; Consulta de elementos, impresso da lista e etc.

FILA (QUEUE): uma derivao do tipo Lista, porm h restries quanto a entrada e sada de elementos. O Conceito de FILA obedece a regra denominada FIFO (First In Firt Out) onde, o primeiro elemento a entrar na estrutura, deve ser o primeiro tambm a sair desta. Este conceito faz aluso as filas encontradas no dia-a-dia, como as filas de banco, de entrada em cinemas, de pagamento de contas em instituies recebedoras, dentre outras. As operaes bsicas em uma fila so: o Insero (ENQUEUE); o Remoo (DEQUEUE); o Inicializao (INICIALIZE); o Fila Cheia (FULL); o Fila Vazia (EMPTY); Para trabalhar com a fila atravs de alocao esttica necessrio criar variveis de controle (INI e FIM) que armazenam a posio onde est contido o primeiro elemento e a identificao da primeira clula vazia respectivamente. Antes de efetuar qualquer insero deve-se atentar que a fila pode no suportar mais elementos, sendo assim deve haver uma verificao a fim de testar se a fila encontra-se cheia. Assim como antes de qualquer remoo existe a necessidade de testar se a fila encontra-se vazia, pois no h como remover um item de uma fila vazia. O teste de fila vazia compara a varivel INI com a varivel FIM, caso estas duas sejam iguais (armazenem o mesmo endereo) a fila encontra-se vazia, caso contrrio a fila no est vazia. Para verificar se a fila est cheia basta comparar o valor armazenado na varivel FIM, se este valor for igual ao tamanho total do vetor FILA, esta se encontra cheia, caso menor, ainda existe espao para insero de novos elementos. Inicialmente a as variveis INI e FIM possuem valores iguais, pois ambas armazenam o nmero da clula inicial do vetor FILA (clula zero), ao inserir um elemento, este atribudo na clula indicada por FIM e logo aps esta atribuio a varivel FIM deve ser incrementada uma clula a frente para sempre indicar a prxima posio apta a receber um novo elemento. Operao semelhante executada ao desejar excluir um elemento da fila, porm quem sofre incremento neste caso a varivel INI, visto que esta armazena o primeiro elemento a entrar na fila, e a cada remoo e incremento passa a apontar para o segundo elemento, depois terceiro e assim sucessivamente at atingir o final da fila, onde INI se iguala a FIM. CURSO DE LICENCIATURA EM COMPUTAO 2 ANO

ALGORITMOS E ESTRUTURA DE DADOS II Prof. Jos Gonalves Dias Neto

DEMONSTRAO GRFICA DE INSERES E REMOES EM FILA.

Fila em estado inicial vazia

Insero do primeiro elemento A e incremento da varivel FIM.

Insero do elemento L e incremento da varivel FIM.

Insero do elemento G e incremento da varivel FIM.

Remoo do elemento A e incremento da varivel INI.

Remoo do elemento L e incremento da varivel INI.

Remoo do ultimo elemento G, incremento da varivel FIM. A fila retorna a condio de vazia

CURSO DE LICENCIATURA EM COMPUTAO 2 ANO

ALGORITMOS E ESTRUTURA DE DADOS II Prof. Jos Gonalves Dias Neto Utilizando esta forma de insero e remoo pode-se facilmente identificar um problema bastante grave que a reduo de clulas disponveis a cada remoo. Em uma fila ideal o correto seria que cada item removido abrisse espao a insero de um novo item, situao que at ento no ocorre. Para corrigir tal problema, ainda utilizando de alocao esttica, pode-se desenvolver uma estrutura denominada FILA CIRCULAR. A fila circular permite que ao incrementar a varivel FIM e esta j estiver para atingir seu limite mximo (tamanho do vetor), verifique se existem sobras de clulas antes da varivel INI. Assim se INI for diferente de 0 (zero) podemos deduzir que j foram removidos elementos no inicio do vetor FILA e que estes elementos removidos podem ceder espao para a insero de novos elementos. Deve-se atentar para uma nova condio de fila cheia surgida com o conceito circular. A fila estar cheia caso INI esteja no inicio da fila E FIM possua valor igual ao tamanho da fila OU caso INI seja maior que 0 (zero) E FIM +1 seja igual a INI.

Lista aps atingido quantidade mxima de elementos.

Remoo do primeiro elemento A e reposicionamento de FIM (perceba que FIM agora menor que INI).

Remoo do elemento L incremento de INI

Remoo do elemento G incremento de INI.

Insero do elemento T e incremento de FIM.

Insero do elemento M, incremento de FIM. A lista encontra-se cheia pois FIM + 1 igual a INI.

CURSO DE LICENCIATURA EM COMPUTAO 2 ANO

ALGORITMOS E ESTRUTURA DE DADOS II Prof. Jos Gonalves Dias Neto Mesmo a estrutura de Lista Circular no garante o aproveitamento de todas as clulas do vetor lista (a no ser onde INI igual a zero e FIM igual ao tamanho do vetor), pois sempre haver uma clula vazia a qual no podemos inserir elemento, visto que se caso o fizer, FIM dever ser incrementado e assim ir se igualar a INI o que resultar em situao de Lista vazia.

PILHA (STACK): Semelhante a FILA, esta estrutura tambm deriva do tipo LISTA e obedece a um principio denominado LIFO (Last In First Out), ou seja, o ultimo elemento que foi inserido na estrutura deve ser o primeiro a sair. Encontramos exemplos na vida real como o clssico Pilha de pratos. Imaginemos estar participando de um almoo em famlia, o primeiro participante que termina a refeio deixa seu prato sujo em cima da pia, e os outros participantes ao terminar vo colocando, um aps o outro, seus respectivos pratos sobre o ultimo prato da pilha, ou seja, o prato da pessoa que terminou a refeio logo antes dele. No momento da lavagem os pratos vo sendo retirados na ordem inversa ao que foram colocados (os ltimos sero os primeiros). As operaes bsicas em uma pilha so: o Insero (PUSH); o Remoo (POP); o Inicializao (INICIALIZE); o Pilha Cheia (FULL); o Pilha Vazia (EMPTY);

Diferenciando-se um pouco da Fila, neste caso no existe a necessidade de instanciar a varivel de inicio de pilha (INI), pois o inicio desta ser sempre na primeira clula do vetor Pilha (clula zero). Sendo assim declarada apenas a varivel responsvel por indicar a prxima clula vazia, capaz de receber um novo elemento (FIM). Em semelhana com a estrutura FILA, para verificar se ainda existe espao para insero de elementos basta comparar a varivel FIM com o tamanho do vetor Pilha, caso FIM seja igual ao tamanho de pilha, ela encontra-se cheia, sem espao para novas inseres, caso contrrio ainda existem clulas disponveis para insero. Como no existe o deslocamento da varivel elemento inserido na pilha, afinal respeitado o principio LIFO, no haver problema de clulas no utilizadas antes do primeiro elemento da pilha. Deve-se tomar cuidados principalmente quanto ao estouro de memria. possvel ocorrer estouros positivos denominados Overflow, onde o programador, erroneamente permite o acesso a um item superior ao tamanho do vetor declarado. Existe tambm o estouro positivo, denominado Underflow, semelhante ao Overflow s que aqui a invaso de memria feita em clula de numero menor que a primeira clula do vetor.

CURSO DE LICENCIATURA EM COMPUTAO 2 ANO

ALGORITMOS E ESTRUTURA DE DADOS II Prof. Jos Gonalves Dias Neto Os conceitos de fila e pilha no aceitam os roubos, ou seja, o conceito de entrada e sada da FILA/PILHA no permite que elementos furem a estrutura ou saiam antes de chegar a vez de sada.

Inicialmente a pilha encontra-se vazia onde pode-se testar isso atravs da varivel FIM que armazena o numero da clula zero. Na sequncia inserido o elemento A na posio FIM e esta incrementada uma posio a frente. Outra insero feita, agora com o elemento L e um novo incremento da varivel FIM efetuado. Na ultima demonstrao o item removido e a varivel FIM ento decrementada.

CURSO DE LICENCIATURA EM COMPUTAO 2 ANO