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

Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

  • Upload
    others

  • View
    44

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

Lista Ligada(Lista Encadeada)

Prof. Gláucya [email protected]

Page 2: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

2

Lista LigadaLista Ligada

● Estrutura de dados linear ou dinâmica.

● A lista encadeada ou lista ligada é uma sequencia de elementos (nós), onde cada nó possui:– Um ou mais campos de informações

– Um ponteiro para o próximo nó da lista

6 8 3 12 \

Page 3: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

3

Lista LigadaLista Ligada

● Exemplo– Dinâmica

– Linear

6 8 3 12 \

1236 8

Page 4: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

4

ListaLista

● Conjunto de operações– Inicializar lista vazia

– Inserir um elemento após o i-ésimo elemento da lista

– Alterar o i-ésimo elemento da lista

– Ordenar a lista em ordem crescente ou decrescente

– Remover o i-ésimo elemento da lista

– Concatenar uma lista em outra lista.

Page 5: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

5

Lista EncadeadaLista Encadeada● lista.c#include <stdio.h>#include <stdlib.h>

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

x

No

valor prox

Page 6: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

6

Lista EncadeadaLista Encadeada

Lista

6 8 3 \

Page 7: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

7

Lista EncadeadaLista Encadeada● lista.c

void imprime_lista(No* lista) {  while (lista != NULL) {    printf("%d\n", lista­>valor);    lista = lista­>prox;  }}

Page 8: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

8

Lista EncadeadaLista Encadeada

Lista

6 8 3 \

Page 9: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

9

Lista EncadeadaLista Encadeada

Lista

6

Page 10: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

10

Lista EncadeadaLista Encadeada

Lista

6 8

Page 11: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

11

Lista EncadeadaLista Encadeada

Lista

6 8 3 \

Page 12: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

12

Lista EncadeadaLista Encadeada● Funçãovoid insere_comeco(No** lista, int valor{  No* no;  no = (No*) malloc(sizeof(No));

  no­>valor = valor;  no­>prox = *lista;

  *lista = no;

  imprime_lista(*lista);}

// ...

Page 13: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

13

Lista EncadeadaLista Encadeada

void main(){

No* lista;

lista = NULL;

insere_comeco(&lista, 3);insere_comeco(&lista, 8);insere_comeco(&lista, 6);insere_comeco(&lista, 6);

imprime_lista(lista);}

Page 14: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

14

Inicializar a ListaInicializar a Lista

X = 3

Lista

Page 15: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

15

Inicializar a ListaInicializar a Lista

X = 3

Lista

3 \Lista

Page 16: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

16

Inicializar a ListaInicializar a Lista

X = 3

Lista

3 \Lista

Lista

3 \

Page 17: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

17

Inserir no início da listaInserir no início da lista

X = 10

Lista

6 8 3 \

Page 18: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

18

Inserir no início da listaInserir no início da lista

X = 10

Lista

6

a

8 3 \

Lista

6 8 3 \10

Page 19: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

19

Inserir no início da listaInserir no início da lista

a

Lista

6 8 3 \10

b

Lista

6 8 3 \10

Page 20: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

20

Inserir no início da listaInserir no início da lista

b

Lista

6 8 3 \10

c

Lista

6 8 3 \10

Page 21: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

21

Inserir no final da listaInserir no final da lista

X = 12Lista

6 8 3 \

Page 22: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

22

Inserir no final da listaInserir no final da lista

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

  No *n, *aux;  n = (No*) malloc(sizeof(No));  n­>valor = v;  n­>prox = NULL;  // Ultimo elemento da lista

  if (*lista == NULL)     *lista = n;  else {    aux = *lista;    while (aux­>prox != NULL)      aux = aux­>prox;    aux­>prox = n;  }}

Page 23: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

23

Inserir no final da listaInserir no final da lista

void main() {

...  insere_final(&lista, 12);  imprime_lista(lista);

}

Page 24: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

24

Inserir no final da listaInserir no final da lista

X = 12Lista

6 8 3 \

Page 25: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

25

Inserir no final da listaInserir no final da lista

X = 12Lista

6

a

8 3 \

Lista

6 8 3 \ 12 \

Page 26: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

26

Inserir no final da listaInserir no final da lista

a

Lista aux

6 8 3 \ 12 \

b

Lista aux

6 8 3 12 \

Page 27: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

27

Inserir no final da listaInserir no final da lista

b

Lista aux

6 8 3 12 \

c

Lista

6 8 3 12 \

Page 28: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

28

Remover no início da listaRemover no início da lista

int remove_inicio(No** lista) {  No* n;  int v;

  if (*lista == NULL)    return ­1;

  n = *lista;  *lista = n­>prox;  

  v = n­>valor;  free(n);  return v;}

Page 29: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

29

Remover no início da listaRemover no início da lista

void main() {

...while (remove_inicio(&lista) != ­1)

    imprime_lista(l);}

Page 30: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

30

Remover no início da listaRemover no início da lista

a

Lista

6 8 3 \

Page 31: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

31

Remover no início da listaRemover no início da lista

a

Listan

6 8 3 \

b

6 8 3 \

Lista

X = 6n

Page 32: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

32

Remover no início da listaRemover no início da lista

c

8 3 \

ListaX = 6

b

6 8 3 \

Lista

X = 6n

Page 33: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

33

Remover no final da listaRemover no final da lista

int remove_final(No** lista) {  No *n, *aux;  int v;

  if (*lista == NULL)    return ­1;  if ((*lista)­>prox == NULL) {    n = *lista;     *lista = NULL;  }

//...}

Page 34: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

34

Remover no final da listaRemover no final da listaint remove_final(No** lista) {

// ...

  else {    aux = *lista; /* Para no penúltimo nó */    while (aux­>prox­>prox != NULL)      aux = aux­>prox;    n = aux­>prox;    aux­>prox = NULL;  }  v = n­>valor;  free(n);  return v;}

Page 35: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

35

Remover no final da listaRemover no final da lista

void main() {

...while (remove_final(&lista) != ­1)

    imprime_lista(l);}

Page 36: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

36

Remover no final da listaRemover no final da lista

aaux

Lista

6 8 3 \

Page 37: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

37

Remover no final da listaRemover no final da lista

aaux

Lista

6 8 3 \

b

Lista

6 8 3 \

aux

X = 3

Page 38: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

38

Remover no final da listaRemover no final da lista

b

Lista

6 8 3 \

aux

X = 3

c

Lista

6 8 \ X = 3

Page 39: Lista Ligada (Lista Encadeada) - Unicampglaucya/ifsp/EDI/EDI_Lista Encadeada.pdf · 2 Lista Ligada Estrutura de dados linear ou dinâmica. A lista encadeada ou lista ligada é uma

39

Remover no final da listaRemover no final da lista

aaux

Lista

6 8 3 \

b

Lista

6 8 3 \

aux

X = 3