Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
Listas lineares
Listas Lineares
Livro Projeto de Algoritmos Nvio Ziviani
Captulo 3 Seo 3.1
http://www2.dcc.ufmg.br/livros/algoritmos/
(adaptado)
Listas Lineares
Maneira de representar elementos de um
conjunto.
lista.
xi precede xi+1 para i = 1,2,,n 1
xi sucede xi-1 para i = 2,3,,n
o elemento xi dito estar na i-sima posio da lista.
23/09/2015
Localizao na memria:
Posies contguas.
Visita:
Insero:
Realizada aps o ltimo item com custo constante.
Um novo item no meio da lista custo no constante.
4) Vazia(Lista). Esta funo retorna true se lista vazia; seno retorna false.
5) Imprime(Lista). Imprime os itens da lista na ordem de ocorrncia.
Remoo:
Final da lista: custo constante
Meio ou incio: requer deslocamento de itens
#define InicioArranjo
#define MaxTam
typedef struct {
TipoChave Chave;
/* outros componentes */
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
Apontador Primeiro, Ultimo;
} TipoLista;
typedef struct {
TipoItem Item[MaxTam];
Apontador Primeiro, Ultimo;
} TipoLista;
typedef struct {
TipoChave Chave;
/* outros componentes */
} TipoItem;
const InicioArranjo = 0;
const MaxTam = 1000;
typedef struct {
TipoChave Chave;
/* outros componentes */
} TipoItem;
0
1000
typedef struct {
TipoItem Item[MaxTam];
Apontador Primeiro, Ultimo;
} TipoLista;
#define InicioArranjo
#define MaxTam
Ultimo
Item
Item[0]
Item[1]
const InicioArranjo = 0;
const MaxTam = 1000;
typedef int TipoChave;
typedef int Apontador;
typedef struct {
TipoChave Chave;
/* outros componentes */
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
Apontador Primeiro, Ultimo;
} TipoLista;
MaxTam
23/09/2015
???
???
???
???
MaxTam
???
???
???
Ultimo
???
???
???
MaxTam
???
???
???
???
???
???
???
MaxTam
???
???
???
MaxTam
Primeiro
???
???
???
???
Ultimo
Primeiro
Primeiro
MaxTam
???
x
???
Ultimo
???
???
MaxTam
???
23/09/2015
Primeiro
p
Ultimo
Primeiro
x1
x3
???
???
Ultimo
x2
x3
Ultimo
???
Ultimo
x1
Primeiro
Ultimo
???
???
x1
x1
x2
x2
x3
x3
x3
x3
???
???
Ultimo
???
Primeiro
Primeiro
x2
x1
x1
x3
x3
x2
???
Primeiro
Primeiro
x1
x2
???
???
???
???
Alocao Sequencial
Vantagens:
economia de memria, pois cada elemento da
lista armazena apenas os dados.
A estrutura da lista definida implicitamente
Acesso a um item qualquer CONSTANTE
Ultimo
???
Alocao Sequencial
Desvantagens:
custo para inserir ou retirar itens da lista, que
pode causar um deslocamento de todos os itens
no pior caso IGUAL AO TAMANHO DO VETOR: CUSTO
LINEAR!
23/09/2015
Alocao Sequencial
Como resolver o problema de tamanho fixo?
Alocao Encadeada
Permite utilizar posies no contguas de
memria
possvel inserir e retirar elementos sem
necessidade de deslocar os itens seguintes da
lista
Alocao Encadeada
Caractersticas:
Tamanho da lista no pr-definido
Cada elemento guarda quem o prximo
Elementos no esto contguos na memria
info
info
NULL
prox
info
prox
info
info
prox
prox
info
NULL
prox
Alocao Encadeada
Uma lista encadeada pode ser organizada de
duas maneiras diferentes:
Lista sem cabea: A primeira clula contm
contedo.
Alocao Encadeada
Uma lista encadeada pode ser organizada de
duas maneiras diferentes:
Lista com cabea: O contedo da primeira clula
irrelevante. Essa clula apenas marcar o incio da
lista.
23/09/2015
Alocao Encadeada
Lista sem cabea
Operaes de Insero e Remoo exigem que
seja verificado se ponteiro para a primeiro clula
igual a NULL
Sobre a Lista
Uma lista definida como um apontador para
a primeira elemento
Uma lista pode ter um apontador para o
ltima clula
prox
info
info
info
prox
prox
NULL
ltimo
Primeiro
Implementao em C
Implementao em C
Celula
typedef struct {
TipoChave Chave;
/* outros componentes */
} TipoItem;
Prox
TipoLista
Celula
Primeiro
9.8
ltimo
Prox
NULL
typedef struct {
Apontador Primeiro, Ultimo;
} TipoLista;
Cabea
Primeiro
prox
NULL
prox
info
info
info
prox
prox
NULL
ltimo
void FLVazia(TipoLista *Lista)
{
Lista->Primeiro = (Apontador) malloc(sizeof(Celula));
Lista->Ultimo = Lista->Primeiro;
Lista->Primeiro->Prox = NULL;
}
int Vazia(const TipoLista *Lista)
{
return (Lista->Primeiro == Lista->Ultimo);
}
Primeiro
ltimo
1. posio
ltima posio
Aps um elemento qualquer E
23/09/2015
Novo
info
NULL
prox
prox
info
info
info
prox
prox
NULL
info
info
info
info
prox
prox
NULL
prox
NULL
NULL
ltimo
prox
ltimo
Primeiro
Primeiro
info
Novo
Primeiro
NULL
prox
prox
info
info
info
prox
prox
NULL
ltimo
Elem E
Primeiro
Elem E
info
NULL
prox
prox
prox
ltimo
info
info
info
prox
prox
NULL
info
info
info
prox
prox
NULL
ltimo
1. posio
ltima posio
Um elemento qualquer E
23/09/2015
Retirada do Elemento na
Primeira Posio da Lista
Temp
prox
info
info
info
prox
prox
NULL
prox
info
info
info
prox
NULL
prox
NULL
ltimo
Primeiro
Anterior
Primeiro
ltimo
prox
info
info
info
prox
prox
NULL
prox
Primeiro
ltimo
Primeiro
Anterior
Elem E
Alocao Encadeada
Localizao na memria:
Posies no sequenciais
Visita:
Apenas na direo xi para xi+1.
Permite apenas acesso sequencial.
Insero:
Realizada em qualquer posio com custo constante.
Remoo:
Custo constante em qualquer posio.
ltimo
info
info
info
prox
prox
NULL
tmp
Alocao Encadeada
Vantagens
Permite inserir ou retirar itens do meio da lista a um custo
constante (importante quando a lista tem de ser mantida
em ordem).
Bom para aplicaes em que no existe previso sobre o
crescimento da lista (o tamanho mximo da lista no
precisa ser definido a priori).
Desvantagens
Utilizao de memria extra para armazenar os
apontadores.
Custo linear para acessar um item no pior caso
23/09/2015
Exemplo: Ordenao
Exemplo: Ordenao
241
dados1
dados2
dados3
dados4
prox
prox
prox
prox
31
...
241
dados1
dados2
dados3
dados4
prox
prox
prox
prox
dados5
NULL
dados5
NULL
Primeiro
Primeiro
31
...
ltimo
ltimo
Exemplo: Ordenao
Percorra lista original
Utilize a chave de cada elemento para indexar o vetor
Insira o elemento como ltimo elemento da lista
correspondente
Exemplo: Ordenao
Soluo: Criar um vetor com 256 posies contendo
ponteiros para listas com alocao dinmica.
Lista 0
0
0
dados
dados
prox
prox
...
dados
NULL
...
Lista 255
255
255
255
dados
dados
prox
prox
255
...
dados
NULL
Avisos
Data das provas:
Prova 1: 13/10/2015
Prova 2: 10/11/2015
Prova 3: 15/12/2015
23/09/2015
Avisos
TP0 disponvel em:
No moodle
exemplo_documentacao_aeds2.pdf
Entrega no dia 06/10/2015 at 23:55
Monitoria
Bernardo: Quarta: 15 s 17h (sala 3017)
Gabriel: Segunda: 13 s 15h (sala 3017)
10