listas encadeadas
DESCRIPTION
Listas encadeadas. Prof. Rosana Palazon. Listas. São usadas para tratar coleções de dados por meio de uma estrutura (de dados) mais flexível do que um vetor. As listas, diferentemente dos vetores, podem crescer ou diminuir quando necessário, por isso são chamadas de estruturas dinâmicas. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/1.jpg)
Listas encadeadas
Prof. Rosana Palazon
1
![Page 2: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/2.jpg)
Listas
São usadas para tratar coleções de dados por meio de uma estrutura (de dados) mais flexível do que um vetor.
As listas, diferentemente dos vetores, podem crescer ou diminuir quando necessário, por isso são chamadas de estruturas dinâmicas
2
![Page 3: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/3.jpg)
Listas encadeadas
Uma lista é chamada encadeada quando um elemento aponta para o seu próximo.
Consideremos:typedef struct lista{ int info; struct lista *prox;}Lista; //definição da lista
Lista *l; //ponteiro que deve receber o endereço da lista
3
![Page 4: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/4.jpg)
Listas encadeadas (criação)
Função de criação:
/* retorna uma lista vazia */
Lista * cria_lista()
{
return NULL;
}
4
![Page 5: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/5.jpg)
Listas encadeadas (inserção)
Função de inserção: /* insere o novo dado no início da lista , e retorna a lista atualizada*/
Lista * insere_lista(Lista *l, int dado){Lista *novo=(Lista*) malloc (sizeof(Lista));novo->info =dado;novo->prox=l;return novo;}
5
![Page 6: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/6.jpg)
Listas encadeadas (exibição)
Função de exibição: /* percorre a lista do inicio até o fim mostrando os elementos*/void exibe_lista(Lista* l){ //variável usada para percorrer a listaLista *aux; for(aux=l;aux!=NULL;aux=aux->prox) printf("%d\t", aux->info);}
6
![Page 7: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/7.jpg)
Lista encadeada (main)
Como seria o trecho do main correspondente à criação e inserção de valores na lista?
int main(){ Lista *l; //declara uma lista não inicializada l=cria_lista(); //inicializa a lista l=insere_lista(l,10); //insere o elemento 10 l=insere_lista(l,20); //insere o elemento 20 l=insere_lista(l,30); //insere o elemento 30 exibe_lista(l); //mostra o conteúdo da lista printf("\n\n"); system("pause"); return 0;}
7
![Page 8: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/8.jpg)
Listas encadeadas (lista vazia)
Função de verificação de lista vazia: /* retorna 1 se vazia ou zero se falso*/
int lista_vazia(Lista* l)
{
if (l==NULL) return 1;
else
return 0;
}
8
![Page 9: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/9.jpg)
Listas encadeadas (busca)
Função de busca de um elemento na lista: /* retorna o elemento ou NULL se não achou*/Lista* busca_lista(Lista* l, int dado){ //variável usada para percorrer a listaLista *a; for(a=l;a!=NULL;a=a->prox){ if(a->info == dado) return a;} return NULL;}
9
![Page 10: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/10.jpg)
Listas encadeadas (remoção) A retirada de um elemento da lista é um
pouco mais complexa pois implica no religamento dos ponteiros.
10
![Page 11: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/11.jpg)
Listas encadeadas (remoção) Função que retira um elemento da lista:
/* retorna o elemento ou a lista original*/Lista* retira_lista(Lista* l, int dado){ Lista* ant=NULL; //ponteiro para o anterior Lista *aux=l;// ponteiro para percorrer a lista //procura o elemento na lista guardando seu anterior while(aux!=NULL && aux->info!=dado) { ant=aux; aux=aux->prox; } //verifica se achou o elemento if(aux==NULL) { printf("\nNao localizado\n"); return l; //não achou - retorna a lista } //retira o elemento if (ant==NULL) //primeiro da lista l=aux->prox; else //retira do meio/fim da lista ant->prox=aux->prox; free(aux); return l;}
11
![Page 12: Listas encadeadas](https://reader036.vdocuments.com.br/reader036/viewer/2022083008/5681487b550346895db58357/html5/thumbnails/12.jpg)
Lista encadeadas – (inserção ordenada)
Lista* insere_ordenado(Lista* l, int v){ Lista* ant=NULL; Lista* p=l; //cria novo elemento Lista* novo=(Lista*)malloc(sizeof(Lista)); novo->info=v; //procura posição de inserção while (p!=NULL && p->info < v) { ant=p; p=p->prox; } //encadeia o elemento if(ant==NULL) {//insere no inicio novo->prox=l; l=novo; } else //insere no meio ou no fim da lista { novo->prox=ant->prox; ant->prox=novo; } return l;}
12