Escolar Documentos
Profissional Documentos
Cultura Documentos
LEE
DEEC - IST
Listas ordenadas
7
base
14
(NULL)
Programacao
LEE
DEEC - IST
Listas ordenadas
Programacao
LEE
DEEC - IST
Listas ordenadas
while(base){
printf(" -> ");
printf("%d\n",base -> dados);
base = base -> seg;
}
}
Programacao
LEE
DEEC - IST
Listas ordenadas
Listas: procura
Procura exaustiva e procura optimizada
tipoLista *procura(tipoLista *base,tipoDados x){
while((base!=NULL) && !(base -> dados != x))
base = base -> seg;
return base;
}
tipoLista *procuraOrdenado
(tipoLista *base,tipoDados x){
while((base!=NULL) && (base -> dados < x))
base = base -> seg;
if((base != NULL) && (base -> dados == x))
return base;
else
return NULL;
}
Fernando Mira da Silva
Programacao
LEE
DEEC - IST
Listas ordenadas
Listas: inserir
compacta
Inserir um registo na lista: versao
tipoLista *insereOrdenado(tipoLista *base,tipoDados x){
/*
ao compacta
* Vers
*/
tipoLista *aux = base, *reg = novoNo(x);
ao
antes da base
*/
reg -> seg = base;
return reg;
}
Programacao
LEE
DEEC - IST
Listas ordenadas
ao */
aux = base;
while( aux -> seg!= NULL
&& aux -> seg -> dados < x)
aux = aux -> seg;
reg -> seg = aux -> seg;
aux -> seg = reg;
return base;
}
Programacao
LEE
DEEC - IST
Listas ordenadas
Listas: remover
Remover um registo da lista
tipoLista *libertaReg(tipoLista *reg){
tipoLista *aux;
aux = reg; reg = reg -> seg;
free(aux);
return reg;
}
tipoLista *apaga(tipoLista *base,tipoDados x){
tipoLista *aux;
if(base != NULL){
if(base -> dados == x){
base = libertaReg(base);
}
else{
aux = base;
while((aux -> seg != NULL) &&
Fernando Mira da Silva
Programacao
LEE
DEEC - IST
Listas ordenadas
Programacao
LEE
DEEC - IST
Listas ordenadas
Programacao
LEE
DEEC - IST
Listas ordenadas
}while(ni != 1);
return x;
}
10
Programacao
LEE
DEEC - IST
Listas ordenadas
int main(){
tipoLista *base;
tipoDados x;
base = inicializa();
x = leDados("Indique um inteiro: ");
while(x != 0) {
if(x > 0){
base = insereOrdenado(base,x);
}
else{
x = -x;
if(procuraOrdenado(base,x) == NULL){
printf("%d nao encontrado\n",x);
}
else{
base = apaga(base,x);
Programacao
LEE
DEEC - IST
11
Listas ordenadas
}
}
listar(base);
x = leDados("Indique um inteiro: ");
}
exit(0);
}
12
Programacao
LEE
DEEC - IST
Listas ordenadas
base
14
(NULL)
Registo de base
(no utilizado)
Programacao
LEE
DEEC - IST
13
Listas ordenadas
14
Programacao
LEE
DEEC - IST
Listas ordenadas
ao
* Procura local de inserc
*/
ant = act; act = act -> seg;
}
insere(&(ant -> seg),x,act);
}
Programacao
LEE
DEEC - IST
15
Listas ordenadas
16
Programacao
LEE
DEEC - IST
Listas ordenadas
17
Programacao
LEE
DEEC - IST
11
topo
facilita as operacoes
base
11
18
Programacao
LEE
DEEC - IST
e inicializacao
19
Programacao
LEE
DEEC - IST
Insercao
tipoAnel *novoNo(tipoDados x){
tipoAnel *novo = (tipoAnel*) calloc(1,sizeof(tipoAnel));
if(novo == NULL){
fprintf(stderr,"Erro na reserva de mem
oria\n");
exit(1);
}
novo -> dados = x;
return novo;
}
void insere(tipoAnel *depois,tipoDados x){
tipoAnel *reg = novoNo(x);
reg -> seg = depois;
reg -> ant = depois -> ant;
depois -> ant = reg;
reg -> ant -> seg = reg;
Fernando Mira da Silva
20
Programacao
LEE
DEEC - IST
}
void insereOrdenado(tipoAnel *base,tipoDados x){
tipoAnel *act;
base -> dados = x;
act = base -> seg;
while(act -> dados < x){
/*
ao
* Procura local de inserc
*/
act = act -> seg;
}
insere(act,x);
}
21
Programacao
LEE
DEEC - IST
22
Programacao
LEE
DEEC - IST
Programacao
LEE
DEEC - IST
23
24
Programacao
LEE
DEEC - IST
Programacao
LEE
DEEC - IST
25
26