lista duplamente ligada (lista duplamente encadeada)glaucya/ifsp/edi/edi_lista duplamente...

31
Lista Duplamente Ligada (Lista Duplamente Encadeada) Prof. Gláucya Boechat [email protected]

Upload: others

Post on 13-Jul-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

Lista Duplamente Ligada(Lista Duplamente Encadeada)

Prof. Gláucya [email protected]

Page 2: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

2

Lista Duplamente LigadaLista Duplamente Ligada

lista

6 8 3

\

\

Page 3: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

3

Lista Duplamente LigadaLista Duplamente Ligada

● Cada nó na lista duplamente ligada possui um ponteiro para o nó precessor e outro para o nó sucessor.

● Permite percurso nas duas direções.– Direita

– Esquerda.

Page 4: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

4

Lista Duplamente LigadaLista Duplamente Ligada

typedef struct no {  int valor;  struct no* ant;   struct no* prox;  }No;

Page 5: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

5

Insere no inicio da lista duplamente ligada

Insere no inicio da lista duplamente ligada

void insere_lista_duplamente_ligada(No** lista, int v){

  No* no;  no = (No*) malloc(sizeof(No));  no­>valor = v;

  if(*lista == NULL){

no­>ant = NULL;no­>prox = NULL;

  }else{ 

no­>prox = *lista;no­>ant = NULL;(*lista)­>ant = no;

  }

  *lista = no;    }

Page 6: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

6

Insere no inicio da lista duplamente ligada

Insere no inicio da lista duplamente ligada

void main() {

No* lista_dl;

lista_dl = NULL;

  insere_lista_duplamente_ligada(&lista_dl, 7);  imprime_lista_duplamente_ligada(lista_dl);

}

Page 7: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

7

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

X = 7

a

Page 8: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

8

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

X = 7

a

lista

6 8 3

\\

7

\b

Page 9: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

9

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

7

\c

lista

6 8 3

\\

7

\b

Page 10: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

10

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

7

\c

lista

6 8 3\

7

\d

Page 11: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

11

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3\

7

\d

6 8 3\

7

\e

lista

Page 12: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

12

Lista Duplamente LigadaLista Duplamente Ligada

inicio fim

6 8 3

\\

Page 13: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

13

Lista Duplamente LigadaLista Duplamente Ligada

typedef struct no {  int valor;  struct no* ant;   struct no* prox;}No;

typedef struct lista{    No *inicio, *fim;}Lista_dl;

Page 14: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

14

Imprime listaImprime lista

void imprime_lista(Lista_dl lista){    No *aux = lista.inicio;    while (aux != NULL) {    printf("%d ", aux­>valor);    aux = aux­>prox;  }

  printf("\n");}

Page 15: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

15

Inicializa listaInicializa lista

void inicia(Lista_dl *lista){

  lista­>inicio = lista­>fim = NULL;}

Page 16: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

16

Inicializa listaInicializa lista

void main() {

Lista_dl lista_dl;

inicia(&lista_dl);

/...

}

Page 17: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

19

Insere no início da listaInsere no início da listavoid insere_fim(Lista_dl* lista, int v){

  No* no;  no = (No*) malloc(sizeof(No));  no­>valor = v;  no­>prox = NULL;

  if(lista­>inicio == NULL){    no­>ant = NULL;    lista­>inicio = lista­>fim = no;    }else{ 

    no­>ant = lista­>fim;     (lista­>fim)­>prox = no;    lista­>fim = no;  }}

Page 18: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

20

Insere no fim da listaInsere no fim da lista

void main() {

Lista_dl lista_dl;

inicia(&lista_dl);

insere_fim(&lista_dl, 3);imprime_lista(lista_dl);

/...

}

Page 19: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

21

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

X = 7

Page 20: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

22

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

X = 7

inicio fim

6 8 3

\\

X = 7

7\

a

Page 21: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

23

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

X = 7

7\

a

inicio fim

6 8 3

\\

7\

b

Page 22: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

24

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

7\

b

inicio fim

6 8 3

\

7\

c

Page 23: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

25

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\

7\

c

inicio fim

6 8 3

\

7\

d

Page 24: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

28

Remove no fim da listaRemove no fim da listaint remove_fim(Lista_dl *lista) {  No *no;  int v;  if (lista­>inicio == NULL)    return ­1;  no = lista­>fim; if(lista­>inicio == lista­>fim) 

lista­>inicio = lista­>fim = NULL; else{  lista­>fim = no­>ant;    (lista­>fim)­>prox = NULL; }  v = no­>valor;  free(no);  return v;}

Page 25: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

29

Remove no fim da listaRemove no fim da lista

void main() {

/...

remove_fim(&lista_dl);imprime_lista(lista_dl);

}

Page 26: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

30

Remove no fim da listaRemove no fim da lista

inicio fim

6 8 3

\

7\

Page 27: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

31

Remove no fim da listaRemove no fim da lista

inicio fim

6 8 3

\

7\

a

inicio fim

6 8 3

\

7\

no

X = 7

Page 28: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

32

Remove no fim da listaRemove no fim da lista

inicio fim

6 8 3

\

7\

a

no

X = 7

X = 7

fim

6 8 3

\

7\

b

inicio no

Page 29: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

33

Remove no fim da listaRemove no fim da lista

X = 7

fim

6 8 3

\

7\

b

inicio no

X = 7

fim

6 8 3

\\

7\

inicio

c

no

Page 30: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

34

Remove no fim da listaRemove no fim da lista

X = 7

fim

6 8 3

\\

7\

inicio

c

no

X = 7

inicio fim

6 8 3

\\

d

Page 31: Lista Duplamente Ligada (Lista Duplamente Encadeada)glaucya/ifsp/EDI/EDI_lista duplamente liga… · 3 Lista Duplamente Ligada Cada nó na lista duplamente ligada possui um ponteiro

35

Lista Duplamente CircularLista Duplamente Circular

lista

6 8 3