Vous êtes sur la page 1sur 6

Listas ordenadas

n Definio
Listas ordenadas n Listas em que os elementos esto ordenados
por algum critrio
Baseado no material de Thiago A. S. Pardo n Em geral, por ordem alfabtica

Algoritmos e Estruturas de Dados I


Ana Beth Bia Elen

Debora Medeiros

Listas ordenadas Listas ordenadas


Nessas trs situaes os acessos (insero, eliminao e
n Situaes consulta) so direcionados a um elemento especfico, e
n Cadastro de funcionrios por ordem alfabtica no mais ao primeiro (ou ltimo) a entrar na lista (fila ou
pilha). Exemplos:
n Lista de passageiros em um vo n Carla Peres foi despedida (retire seu nome do
cadastro)
n Lista de deputados presentes no congresso
n Edmundo funcionrio? Verifique se seu nome
n Telefones da cidade consta do cadastro
n Qual o salrio do funcionrio Pedro Malan?
n Sandra Bulloc foi contratada; inclua-a no cadastro

n Nos exemplos acima, os registros (as pastas) de cada


funcionrio so (ordenados e) procurados pelo nome. O
nome, neste caso, a chave de busca, ou simplesmente
chave.

Listas ordenadas Listas ordenadas


n Operaes n Implementaes
n cria(lista) n Seqencial
n IsEmpty(lista) n Encadeada
n IsFull(lista)
n esta_na_lista(lista,x)
n Implicam mudanas na forma de manipulao da
n inserir(lista,x) lista
n remover(lista,x)
n imprimir_todos_da_lista(lista)
n Etc.
Lista ordenada seqencial Lista ordenada seqencial
n O que acontece se quero incluir na n O que acontece se quero incluir na
lista a funcionria Alice do Pas ... ... lista a funcionria Alice do Pas ... ...
das Maravilhas? Zorro i+1 das Maravilhas? Zorro i+1
Zoroastro i Zoroastro i
Tem que se deslocar todos os
Zico i-1 Zico i-1
elementos da lista para inserir o
... ... novo elemento na posio correta ... ...
Antnio 3 Antnio 3
Andr 2 Andr 2
Ana 1 Ana 1

Lista ordenada encadeada Lista ordenada encadeada

n Lista de Gregos, Troianos e Tantlidas n Vantagem sobre a alocao seqencial


n Os ns podem ser inseridos e eliminados na
posio correta, sem realocao dos demais
elementos
Aquiles Menelau Neoptlemo Reso

...
n Complexidade de algoritmos
n O que implica?
n A diferena significativa?
n O que deve acontecer na lista quando
n Nasce Filoctetes?
n Nasce Agammnon?
n Morre Menelau?

Lista ordenada esttica e encadeada Lista ordenada dinmica e encadeada


n Declarao da estrutura n Declarao da estrutura

#define TAM ...


typedef struct bloco {
char nome[20];
typedef struct bloco {
char nome[20]; struct bloco *prox;
int prox; } no
} no
typedef struct {
typedef struct { no *ini;
int ini, primeiro_vazio; } ListaOrd;
no v[TAM];
} ListaOrd;
Lista ordenada dinmica e encadeada Insero: caso 1
n Exerccio: identificar os possveis casos n insere(L,x,erro)
para a insero (caso 1, caso 2, ...) n Lista vazia
se possvel, aloca novo n e erro false
n Supondo que o elemento a ser inserido no n x
est na lista prximo de n nada
ini n anterior P

ini

novo n

Insero: caso 2 Insero: caso 3


n insere(L,x,erro) n insere(L,x,erro)
n x < 1 da lista n x > 1 da lista
se possvel, aloca novo n e erro false se possvel, aloca novo n e erro false
n x n x
prximo de n P prximo de n P
ini n prximo de anterior n
novo n
novo n
anterior
x P anterior P
x

ini y>x ini

Insero Lista ordenada dinmica e encadeada

n Exerccio: implementar a funo de n Operao de remoo de um elemento X


insero n Casos?
Lista ordenada dinmica e encadeada Remoo: caso 1
n Operao de remoo de um elemento X n remove(L,x,erro)
n 4 casos n a lista vazia
n Lista vazia erro true
X no est na lista
n X menor do que o primeiro elemento da lista
X no est na lista anterior P

n X igual ao primeiro elemento da lista


X est na lista
n X maior do que o primeiro elemento da lista ini
X pode estar na lista

Remoo: caso 2 Remoo: caso 3


n remove(L,x,erro) n remove(L,x,erro)
n x < 1 da lista n x = 1 da lista
erro true ini aponta para o prximo
libera n indicado por p
erro false anterior
anterior P
P
ini x
ini y>x
P
anterior ini x

Remoo: caso 4 Remoo: caso 4


n remove(L,x,erro) n remove(L,x,erro)
n x > 1 da lista e encontrado n x > 1 da lista e no encontrado
prximo do anterior prximo de P erro true
libera n indicado por P
erro false
anterior P anterior
P
ini x ini

anterior P
anterior P
ini x
ini y>x
Exerccio: produzindo uma lista
Remoo
ordenada
n Exerccio: implementar a funo de n Implemente uma funo que ordene uma lista
remoo de nomes prprios, trocando os nomes entre
os blocos

Exerccio: produzindo uma lista


Questo
ordenada
n Em duplas n Como poderia ser implementada uma lista
ordenada com elementos repetidos? O que
n Implemente uma funo que ordene uma lista mudaria?
de nomes prprios, trocando somente os
ponteiros dos blocos

n Dica: desenhe/esboce as vrias situaes


possveis

Questo Exerccio: unio de listas ordenadas

n E se a lista ordenada fosse circular? O que n Situao


mudaria? n Voc recebeu duas listas dinmicas e
encadeadas ordenadas, de tamanhos
possivelmente diferentes
n Voc no pode se dar ao luxo de contar com
mais memria do que a j usada pelas listas,
pois a aplicao rodando crtica

n Implemente uma funo em C que faa a


unio das duas listas, mantendo a ordenao
Exerccio para casa
n Implemente as operaes sobre uma lista
ordenada esttica e encadeada

Vous aimerez peut-être aussi