Vous êtes sur la page 1sur 10

1.

Implementao de Listas Lineares usando Alocao Esttica e Acesso Sequencial Nesta seo trataremos da implementao de listas lineares usando alocao esttica/sequencial. Aqui faremos a especificao do TDA para listas lineares no ordenadas e ordenadas. Uma lista esttica sequencial pode ser implementada atravs de um vetor. Exemplos de listas estticas/sequenciais: lista telefnica, lista de alunos, entre outras. Caractersticas de Lista Esttica/Sequencial: os elementos da lista esto armazenados fisicamente em posies consecutivas; a insero de um elemento na posio a(i) causa o deslocamento a direita do elemento de a(i) ao ltimo; eliminao do elemento a(i) requer o deslocamento esquerda do a(i+1) ao ltimo; Vantagens: acesso direto indexado a qualquer elemento da lista tempo constante para acessar o elemento i - depender somente do ndice. Desvantagem: movimentao quando eliminado/inserido elemento tamanho mximo pr-estimado Quando usar: listas pequenas insero/remoo no fim da lista tamanho mximo bem definido 1.1. Implementao do TDA lista_no_ordenada a) estrutura da lista - cada elemento da lista chamaremos de n 0 a1 1 a2 2 3 4 (MAX-1)

inicio da lista (implcito)

fim da lista (explcito)

fim do vetor (implcito)

define estrutura Lista como vetor de inteiros itens com MAX posies; um inteiro fim_da_lista que indica o final da lista. fim 1

b) Inicializar_Lista A funo que inicializa a lista deve criar uma lista vazia, sem nenhum elemento. Como a lista representada por um vetor, o ndice que aponta para o final da lista deve ser igual a zero. 0 1 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Inicializar_Lista (endereo da lista) inicio atribui varivel que indica fim_da_lista o valor 0; fim; c) Lista__Vazia Pode ser til implementarmos uma funo que verifica se a lista est vazia ou no. Uma lista vazia se o valor de fim_da_lista zero. tipo Lista__Vazia (endereo da lista) inicio se varivel que indica fim_da_lista for igual a 0 ento a funo retorna True seno a funo retorna False fim d) Lista__Cheia Pode ser til implementarmos uma funo que verifica se a lista est cheia ou no. Uma lista cheia se o valor de fim_da_lista igual ao tamanho do vetor (MAX). 0 1 2 3 4 (MAX-1)

inicio da lista

fim do vetor

fim_da_lista

tipo Lista-_Cheia(endereo da lista) inicio se varivel que indica fim_da_lista = MAX 2

ento a funo retorna True seno a funo retorna False fim e) Insere_Elem Uma vez inicializada uma lista possvel inserir elementos nela, at que a lista se torne cheia. Para cada elemento inserido na lista, preciso atualizar o ndice que indica fim_da_lista. A funo de insero mais simples a que insere no final da lista pois no provoca movimentao de dados. Como exemplo vamos inserir o elemento a1 em uma lista vazia. Aps a insero a lista ficar com a seguinte instncia: 0 1 2 3 4 (MAX-1) a1

inicio da lista

fim da lista

fim do vetor

A insero do elemento a2 produz a seguinte instncia da lista: 0 a1 1 a2 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

inteiro Insere_Elem(endereo da lista, elemento a ser inserido) inicio se a lista est cheia ento a funo retorna o valor -1 indicando fracasso na operao seno inicio atribui ao n apontado por fim-da-lista o elemento a ser inserido; incrementa o valor da varivel fim_da_lista; a funo retorna o valor 1 indicando sucesso na operao; fim fim; f) Remove_Elem Para completar o conjunto de funes que manipula uma lista, vamos implementar a funo que remove um dado elemento de uma lista. A funo que remove um elemento deve primeiro localizar a posio do elemento que desejamos remover para ento removlo. Um problema que surge quando desejamos remover um elemento que no o ltimo elemento da lista. Neste caso necessrio movimentar dados para eliminar o espao

deixado pelo elemento removido. Como exemplo vamos remover o elemento a2 da lista abaixo: 0 a1 1 a2 2 a3 3 a4 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Ao remover o elemento a2 a lista fica com um n vazio: 0 a1 1 2 a3 3 a4 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Uma de duas estratgias podem ser utilizadas: f1) mover todos os elementos que se encontram aps este n de tal forma a eliminar o espao vazio e atualizar o fim da lista:

0 a1

1 a3

2 a4

4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

inteiro Remove_Elem(endereo da lista, elemento a ser removido) inicio se lista est vazia ento a funo retorna o valor -1 indicando fracasso na operao seno inicio percorre a lista a partir do seu inicio at encontrar o elemento desejado ou at que a lista termine; se elemento no foi encontrado ento a funo retorna o valor -1 indicando fracasso na operao seno inicio deslocar todos os elementos que esto aps o elemento a ser 4

removido um n para a esquerda ; decrementa o valor de fim_da_lista; //atualiza fim da lista a funo retorna o valor 1 indicando sucesso na operao; fim fim f2) preencher a posio vazia com o ltimo elemento da lista e atualizar a varivel fim_da_lista 1.2 Implementao de Listas Lineares Ordenadas Nesta subseo trataremos das operaes de insero e remoo uma vez que a implementao das demais operaes a mesma para lista lineares no ordenadas, veja subseo 3.1.2. a) Insere_Elem A operao de insero em uma lista ordenada deve garantir que aps a insero a lista continue ordenada. Para inserir em uma lista ordenada estudaremos 4 casos possveis: caso 1: a lista est vazia: neste caso o elemento dever ser inserido no final da lista. Veja no exemplo abaixo, a insero do elemento 4 em uma lista vazia

lista antes da insero: 0 1 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

lista aps a insero 0 4 1 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

caso 2: o elemento a ser inserido menor ou igual ao primeiro elemento da lista. Considere a seguinte instncia da lista:

0 4

1 7

4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

para inserir um elemento de valor igual a 2 no necessrio percorrer a lista para encontrar a posio correta. Como 2 menor que o primeiro elemento da lista ele dever ser inserido na cabea da lista. A insero do elemento de valor 2 produz uma lista com a seguinte instncia: 0 2 1 4 7 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

caso 3: o elemento a ser inserido maior que o primeiro elemento da lista e menor que o ltimo. Neste caso necessrio percorrer a lista a partir do seu inicio at encontrar o primeiro elemento na lista maior que o elemento a ser inserido. Considere a lista com os elementos 2,4 e 7 dada no item anterior. Como exemplo queremos inserir um elemento com valor igual a 5. Neste caso a lista percorrida at encontrar o elemento com valor 7 na posio 2 da lista. Todos os elementos a partir da posio 2 devero ser deslocados um n para a direita e o elemento 5 inserido nesta posio: 0 2 1 4 5 2 3 7 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

caso 4: o elemento a ser inserido o maior ou igual ao ltimo elemento da lista. Neste caso o elemento dever ser inserido no final da lista sem qualquer movimentao de dados. Considere a lista do item anterior e como exemplo queiramos inserir um elemento com valor igual a 10. Como 10 maior que 7 (ltimo elemento da lista) a lista resultante :

0 2

1 4 5

3 7

4 (MAX-1) 10

inicio da lista Algortimo

fim do vetor fim da lista

inteiro Insere_Elem(endereo da lista, elemento a ser inserido) inicio se lista cheia ento a funo retorna valor -1; se lista vazia OU elemento a ser inserido maior ou igual ao ltimo elemento da lista // casos 1 e 4 (insere no final da lista) entao inicio insere elemento em fim-da-lista; incrementa fim-da-lista; fim seno inicio //caso 2 e 3 ( insere no inicio ou no meio da lista) inicializa a varivel auxiliar aux para a primeira posio da lista; enquanto (elemento a ser inserido for maior que elemento da lista indicado pela varivel auxiliar aux) faa incrementa a varivel auxiliar aux; fim-enquanto; desloca todos os elementos uma posio para a direita a partir do fim-da-lista at a varivel auxiliar aux; insere elemento na posio indicado pela varivel auxiliar aux; incrementa fim-da-lista; fim a funo retorna valor 1; fim

b) Remove_Elem Da mesma forma que na insero, a remoo de um elemento deve garantir que a lista continue ordenada. Para remover um elemento da lista, 5 casos devem ser considerados: caso 1: a lista est vazia: neste caso no possvel remover o elemento 0 1 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

caso 2: o elemento a ser removido menor que o primeiro elemento da lista. Neste caso o elemento que se deseja remover no est na lista. Considere a seguinte instancia da lista: 0 4 1 7 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Suponha que queiramos remover o elemento com valor 1. Como 1 menor que 4, certo que o elemento 1 no est na lista. Sendo assim, no possvel remov-lo. caso 3: o elemento a ser removido maior que o maior elemento da lista. Considere a instncia da lista dada no item anterior e que queiramos remover o elemento de valor 10. Como 10 maior que 7 o elemento desejado no pertence lista, portanto no possvel remov-lo. caso 4: o elemento a ser removido igual ao primeiro elemento da lista. Neste caso o elemento deve ser removido da cabea da lista. Considere o exemplo anterior e suponha que queiramos remover o elemento com valor igual a 4. O resultado ser a lista: 0 7 1 2 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

caso 5: o elemento a ser removido maior ao primeiro elemento da lista e menor ou igual ao ltimo elemento da lista. Neste caso, a lista deve ser percorrida at encontrar o elemento desejado ou um elemento que seja maior que o elemento que se deseja remover. Considere a seguinte lista: 0 4 1 7 2 10 3 15 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Suponha que queiramos remover o elemento 10. Como 10 est entre 4 e 15, possvel que faa parte da lista. Neste caso, a lista percorrida a partir do primeiro elemento at encontrar o elemento com valor 10. O elemento desejado removido e todos os elementos a sua direita sero deslocados uma posio para a esquerda. O resultado : 0 4 1 7 2 15 3 4 (MAX-1)

inicio da lista

fim da lista

fim do vetor

Dada a lista original, suponha que queiramos remover o elemento 8. Como 8 maior que 4 e menor que 15, pode estar na lista. Para encontr-lo, a lista percorrida at encontrarmos o elemento com valor igual a 10. Se o elemento 8 no foi encontrado at ento porque ele no pertence a lista. Sendo assim a busca pode ser concluda. Algortimo inteiro Remove_Elem(endereo da lista, elemento a ser removido) inicio se lista vazia OU elemento menor que primeiro elemento da lista OU elemento maior que o maior elemento da lista //casos 1, 2 e 3 ento a funo retorna -1 indicando fracasso da operao seno inicio // casos 4 inicializa uma varivel auxiliar aux apontando para a cabea da lista; enquanto elemento a ser removido for maior que elemento indicado pela varivel auxiliar aux faa incremente o ponteiro auxiliar; fim do enquanto; se elemento a ser removido foi encontrado ento inicio desloca todos os elementos uma posio para a esquerda a partir da varivel auxiliar aux at o fim-da-lista; decrementa fim-da-lista; a funo retorna o valor 1 indicando sucesso na operao; fim; seno a funo retorna o valor -1 fim; 9

fim;

10

Vous aimerez peut-être aussi