A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Listas lineares Denise Guliato Faculdade de Computação – UFU www.facom.ufu.br/~guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante.

Apresentações semelhantes


Apresentação em tema: "Listas lineares Denise Guliato Faculdade de Computação – UFU www.facom.ufu.br/~guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante."— Transcrição da apresentação:

1 Listas lineares Denise Guliato Faculdade de Computação – UFU Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados – Série de Livros Didáticos - Informática - UFRGS

2 Listas lineares Listas lineares duplamente encadeadas Crédito do slide para Nina Edelwais e Renata Galante Denise Guliato

3 LL duplamente encadeadas PtLista L1L1 L2L2 L3L3 L4L4 Cada nodo tem 2 campos de elo A lista pode ser percorrida nas duas direções LL duplamente encadeadas Anterior Info Próximo Nodo genérico Crédito do slide para Nina Edelwais e Renata Galante Denise Guliato

4 LL duplamente encadeadasOperações Criar e inicializar uma lista Inserir novo nodo Remover um nodo Consultar um nodo Destruir lista Algoritmos Semelhantes a LL encadeada simples Tipo de nodo utilizado nos algoritmos: struct no { struct no* ant; int info; struct no* prox; } typedef struct no Lista;

5 Algoritmo: criar lista circular Lista* Cria_lista(void) Lista* Cria_lista(void) { return NULL; }

6 LL duplamente encadeadas Inserção de um novo nodo no meio da lista PtLista Novo nodo L3L3 L4L4 L2L2 L1L1 L5L5 PtLista L1L1 L2L2 L3L3 L4L4 L5L5 Crédito do slide para Nina Edelwais e Renata Galante Denise Guliato

7 Inserção de um novo nodo no inicio da lista PtLista L1L1 L2L2 L3L3 L4L4 L5L5 L1L1 L2L2 L3L3 L4L4 L5L5 Adaptado de Nina Edelwais e Renata Galante Denise Guliato

8 Lista* Insere_elem(Lista *Ptl, int elem) { Lista *Ptnodo; Ptnodo = (Lista*)malloc(sizeof(Lista)); if (Ptnodo == NULL) return Ptl; Ptnodo->info = elem; Ptnodo->prox = Ptl; Ptnodo->ant = NULL; if(Ptl != NULL) Ptl->ant = Ptnodo; Ptl = Ptnodo; return Ptl; } Algoritmo: Algoritmo: inserir um nodo no inicio da lista Lista* Insere_elem(Lista* Ptl,int elem)

9 LL duplamente encadeadas Remoção de novo nodo A B PtLista C D A B C D Remover Crédito do slide para Nina Edelwais e Renata Galante Denise Guliato

10 Lista* Remove_elem(Lista *Ptl, int elem) { Lista *atual; if (Ptl == NULL) return Ptl; atual = Ptl; while (atual != NULL && elem != atual->info) { atual = atual->prox; } if (atual == NULL)// não achou return Ptl; if (atual == Ptl)// primeiro nodo a ser removido Ptl = atual->prox; else // nodo removido do meio ou do final da lista atual->ant->prox = atual->prox; if (atual->prox != NULL) atual->prox->ant = atual->ant; free(atual); return Ptl; } Algoritmo: Algoritmo: Remover um nodo de LL Duplamente Encadeada Lista* Remove_elem(Lista *Ptl, int elem)

11 LL duplamente encadeadas Consulta à lista Acesso sempre pelo primeiro nodo da lista A lista pode ser percorrida nas duas direções Adaptado de Nina Edelwais e Renata Galante Denise Guliato

12 Algoritmo: Algoritmo: Consulta K-esimo nodo da Lista int Consulta_nodo(Lista Ptl, int pos,int *elem) LL encadeada circular int Consulta_nodo(Lista *Ptl, int pos, int *elem) { int cont = 1; Lista *pt; pt = Ptl; if (pos <= 0 || pt == NULL) return 0; while(pt != NULL && cont < pos) { pt=pt->prox; cont++; } if (pt == NULL) return 0; else { *elem=pt->info; return 1; }

13 Algoritmodestruir lista circular Lista* Libera_lista(Lista *Ptl) Algoritmo : destruir lista circular Lista* Libera_lista(Lista *Ptl) Lista* Libera_lista(Lista *Ptl) { Lista *aux; while (Ptl!= NULL) { aux = Ptl; Ptl = Ptl->prox; free(aux); } return NULL; }

14 typedef struct no Lista; Lista* Cria_lista(void); Lista* Libera_lista(Lista* Ptl); int E_vazia(Lista* Ptl); int E_cheia(Lista* Ptl); Lista* Insere_elem(Lista* Ptl, int elem); Lista* Remove_elem(Lista* Ptl, int elem); int Tamanho_lista(Lista* Ptl); int Consulta_nodo(Lista* Ptl, int pos, int *elem); lladae2d.h

15 #include #include "lladae2d.h“ struct no { struct no* ant; int info; struct no* prox; }; Lista* Cria_lista(void) {……..} Lista* Libera_lista(Lista *Ptl) {…….} int E_vazia(Lista *Ptl) {…….} int E_cheia(Lista *Ptl) {…….} Lista* Insere_elem(Lista *Ptl, int elem) { } Lista* Remove_elem(Lista *Ptl, int elem) { } int Tamanho_lista(Lista Ptl) {…….} int Consulta_nodo(Lista *Ptl, int pos,int *elem) {……} lladae2d.c

16 LL duplamente encadeada circular Considere uma Lista duplamente encadeada circular PtLista L1L1 L2L2 L3L3 L4L4

17 Exercício Implemente o TAD Lista para a lista circular duplamente encadeada. Teste no programa do jogo baseado no problema de Josephus


Carregar ppt "Listas lineares Denise Guliato Faculdade de Computação – UFU www.facom.ufu.br/~guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante."

Apresentações semelhantes


Anúncios Google