Lista Duplamente Encadeada (Lista Duplamente Ligada)glaucya/ifsp/EDI/EDI_lista... · 4 Lista...
Transcript of Lista Duplamente Encadeada (Lista Duplamente Ligada)glaucya/ifsp/EDI/EDI_lista... · 4 Lista...
Lista Duplamente Encadeada(Lista Duplamente Ligada)
Prof. Gláucya [email protected]
2
Lista duplamente encadeada(Lista duplamente ligada)
Lista duplamente encadeada(Lista duplamente ligada)
lista
6 8 3
\
\
4
Lista duplamente encadeada(Lista duplamente ligada)
Lista duplamente encadeada(Lista duplamente ligada)
● Na lista duplamente encadeada, cada nó possui um ponteiro para o nó precessor e outro para o nó sucessor.– A lista pode ou não ter um nó cabeça.
● Permite percurso nas duas direções.– Direita
– Esquerda.
5
Lista duplamente encadeada(Lista duplamente ligada)
Lista duplamente encadeada(Lista duplamente ligada)
struct no { int valor; struct no* ant; struct no* prox; };
6
Insere no inicio da listaInsere no inicio da listavoid insere_lista_duplamente_encadeada(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; }
7
Inserir no fim da lista circularInserir no fim da lista circular
void main() {
... insere_lista_duplamente_encadeada(&lista, 5); imprime_lista_duplamente_encadeada(lista);
}
8
Insere no inicio da listaInsere no inicio da lista
lista
6 8 3
\\
X = 7
a
9
Insere no inicio da listaInsere no inicio da lista
lista
6 8 3
\\
X = 7
a
lista
6 8 3
\\
7
\b
10
Insere no inicio da listaInsere no inicio da lista
lista
6 8 3
\\
7
\b
lista
6 8 3\
7
\c
11
Insere no inicio da listaInsere no inicio da lista
lista
6 8 3\
7
\c
6 8 3\
7
\d
lista
12
Lista duplamente encadeada(Lista duplamente ligada)
Lista duplamente encadeada(Lista duplamente ligada)
inicio fim
6 8 3
\\
13
Lista duplamente encadeada(Lista duplamente ligada)
Lista duplamente encadeada(Lista duplamente ligada)
struct no { int valor; struct no* ant; struct no* prox;};typedef struct no No;
struct lista{ No *inicio, *fim;};typedef struct lista Lista;
14
Inicializa listaInicializa lista
void inicia(Lista *lista){ lista>inicio = lista>fim = NULL;}
15
Inicializa listaInicializa lista
void main() {
Lista lista;
inicia(&lista);
/...
}
19
Insere no início da listaInsere no início da listavoid insere_fim(Lista* 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 lista;
inicia(&lista);
insere_fim(&lista, 3);imprime_lista(lista);
/...
}
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 *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);imprime_lista(lista);
}
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