Você está na página 1de 39

Lista Ligada

(Lista Encadeada)
Prof. Gláucya Boechat
gcbcht@gmail.com
Lista 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 \

2
Lista Ligada
● Exemplo
– Dinâmica

6 8 3 12 \

– Linear

6 8 3 12

3
Lista
● 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.

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

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

valor prox
x

5
Lista Encadeada

Lista

6 8 3 \

6
Lista Encadeada
● lista.c

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

7
Lista Encadeada

Lista

6 8 3 \

8
Lista Encadeada

Lista

9
Lista Encadeada

Lista

6 8

10
Lista Encadeada

Lista

6 8 3 \

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

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

  *lista = no;

  imprime_lista(*lista);
}

// ...
12
Lista 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);
}
13
Inicializar a Lista

X=3
Lista

14
Inicializar a Lista

X=3
Lista

Lista 3 \

15
Inicializar a Lista
X=3
Lista

Lista 3 \

Lista

3 \
16
Inserir no início da lista

X = 10
Lista

6 8 3 \

17
Inserir no início da lista

X = 10
Lista

6 8 3 \

Lista

10 6 8 3 \
a

18
Inserir no início da lista

Lista

10 6 8 3 \
a
Lista

10 6 8 3 \
b

19
Inserir no início da lista

Lista

10 6 8 3 \
b
Lista

10 6 8 3 \
c

20
Inserir no final da lista

Lista X = 12

6 8 3 \

21
Inserir 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;
  } 22
}
Inserir no final da lista
void main() {

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

23
Inserir no final da lista

Lista X = 12

6 8 3 \

24
Inserir no final da lista

Lista X = 12
6 8 3 \

Lista

6 8 3 \ 12 \
a

25
Inserir no final da lista

Lista aux

6 8 3 \ 12 \
a
Lista aux

6 8 3 12 \
b

26
Inserir no final da lista

Lista aux

6 8 3 12 \
b
Lista

6 8 3 12 \
c

27
Remover 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;
}
28
Remover no início da lista
void main() {

...
while (remove_inicio(&lista) != ­1)
    imprime_lista(l);
}

29
Remover no início da lista

Lista

6 8 3 \
a

30
Remover no início da lista

Lista
n
6 8 3 \
a

Lista
n
X=6
6 8 3 \
b

31
Remover no início da lista

Lista
n
X=6
6 8 3 \
b

Lista
X=6
8 3 \
c

32
Remover 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;
  }
//...
}

33
Remover no final da lista
int 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;
}
34
Remover no final da lista
void main() {

...
while (remove_final(&lista) != ­1)
    imprime_lista(l);
}

35
Remover no final da lista

Lista

6 8 3 \
aux
a

36
Remover no final da lista

Lista

6 8 3 \
aux
a

Lista
X=3
6 8 3 \
aux
b

37
Remover no final da lista

Lista
X=3
6 8 3 \
aux
b

Lista
X=3
6 8 \
c

38
Remover no final da lista

Lista

6 8 3 \
aux
a

Lista
X=3
6 8 3 \
aux
b

39

Você também pode gostar