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

Post on 13-Jul-2020

14 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Lista Duplamente Ligada(Lista Duplamente Encadeada)

Prof. Gláucya Boechatgcbcht@gmail.com

2

Lista Duplamente LigadaLista Duplamente Ligada

lista

6 8 3

\

\

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.

4

Lista Duplamente LigadaLista Duplamente Ligada

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

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;    }

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);

}

7

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

X = 7

a

8

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

X = 7

a

lista

6 8 3

\\

7

\b

9

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

7

\c

lista

6 8 3

\\

7

\b

10

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3

\\

7

\c

lista

6 8 3\

7

\d

11

Insere no inicio da listaInsere no inicio da lista

lista

6 8 3\

7

\d

6 8 3\

7

\e

lista

12

Lista Duplamente LigadaLista Duplamente Ligada

inicio fim

6 8 3

\\

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;

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");}

15

Inicializa listaInicializa lista

void inicia(Lista_dl *lista){

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

16

Inicializa listaInicializa lista

void main() {

Lista_dl lista_dl;

inicia(&lista_dl);

/...

}

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;  }}

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);

/...

}

21

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

X = 7

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

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

24

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\\

7\

b

inicio fim

6 8 3

\

7\

c

25

Insere no fim da listaInsere no fim da lista

inicio fim

6 8 3

\

7\

c

inicio fim

6 8 3

\

7\

d

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;}

29

Remove no fim da listaRemove no fim da lista

void main() {

/...

remove_fim(&lista_dl);imprime_lista(lista_dl);

}

30

Remove no fim da listaRemove no fim da lista

inicio fim

6 8 3

\

7\

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

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

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

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

35

Lista Duplamente CircularLista Duplamente Circular

lista

6 8 3

top related