132
ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

Embed Size (px)

Citation preview

Page 1: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Aula 10 – Listas Duplamente Encadeadas

Page 2: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Atenção aos Temas Principais dessa Aula

Page 3: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Conteúdo Programático desta aula

Compreender o conceito de Lista Duplamente

Encadeada;

Compreender operações com LDE sem ou com

descritor;

Compreender o conceito de Lista Duplamente

Encadeada;

Compreender operações com LDE sem ou com

descritor;

Page 4: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Direto ao Assunto

Page 5: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 6: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Nas listas duplamente ligadas, cada nó possui dois ponteiros, sendo que um aponta para o nó anterior e o outro, para o nó posterior. Sendo assim, a lista pode ser “percorrida” começando por qualquer extremidade.

Um ponteiro ant aponta para o nó que precede enquanto que o ponteiro prox, aponta para o

nó que o sucede.

Page 7: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Os algoritmos de algumas operações com LDE(listas ligadas) têm um certo grau de complexidade, mas facilitam na manipulação da LDE.

 A LDE é indicada quando precisarmos percorrer a lista do fim para o início.

Page 8: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Quando usamos LDE sem descritor, as funções básicas de inserção, remoção, busca, conta nós e impressão, quase não têm diferença para as LE exceto pelo ponteiro anterior.

Não existe a necessidade de dimensionar o número de nós porque a alocação vai sendo feita de acordo com a necessidade.

Page 9: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Criar listaLiberar listaVerificar se a lista está vaziaInserir na primeira posiçãoInserir na última posiçãoRemover o primeiro elemento da listaRemover o último elemento da listaRemover um elemento por buscaExibir lista do primeiro para o último nóExibir lista do último para o primeiro nóContar número de nós, etc.

Algumas operações realizadas com uma LDE

Page 10: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 11: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

struct listaDE { int info; struct listaDE* ant; struct listaDE* prox;};

Definido a struct

Para entendimento das funções

Page 12: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Inicialização

listaDE *lista= NULL;

Definido a struct

Para entendimento das funções

struct listaDE { int info; struct listaDE* ant; struct listaDE* prox;};

Page 13: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 14: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 15: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

Page 16: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

2323

Page 17: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

2323 LISTALISTA

Page 18: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

NULLNULL 2323 LISTALISTA

Page 19: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

NULLNULL 2323 LISTALISTA

LISTALISTA

ifif

Page 20: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

novonovo

NULLNULL 2323 LISTALISTA

LISTALISTAlista = insere(lista, valor);

Page 21: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

Page 22: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

Page 23: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

2323

Page 24: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323

Page 25: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323LISTALISTA

ifif

Page 26: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323LISTALISTA

LISTALISTA

ifif

Page 27: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323

auxaux

LISTALISTAelseelse

Page 28: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323

auxaux

LISTALISTA

novonovo

elseelse

Page 29: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323auxaux

auxaux

LISTALISTA

novonovo

elseelse

Page 30: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

novonovo

NULLNULL2323auxaux

auxaux

LISTALISTA

novonovo

elseelse

lista = insere(lista, valor);

Page 31: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

Page 32: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

exibeIpF

Page 33: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

exibeIpF

Page 34: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

exibeFpI

Page 35: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

exibeFpI

Page 36: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

contaNós

Page 37: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

contaNós

Page 38: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

busca

Page 39: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

remove

Page 40: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

remove

Page 41: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

remove

Page 42: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

A REMOÇÃO DE UM NÓ - Um ponto crítico nas LDE

p->ant->prox = p->prox;p->prox->ant = p->ant;

Page 43: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 44: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 45: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

1) Através de seu ponteiro ant, p apontava para o nó anterior cuja representação é: p->ant. 2) Esse endereço foi copiado para o ponteiro ant do próximo nó acessado por p->prox->ant. (linha verde) 3) Sendo assim, após a remoção de p, p->prox ->ant apontará para o nó anterior ao que foi removido.(seta azul)

Page 46: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

1) Através de seu ponteiro ant, p apontava para o nó anterior cuja representação é: p->ant. 2) Esse endereço foi copiado para o ponteiro ant do próximo nó acessado por p->prox->ant. (linha verde) 3) Sendo assim, após a remoção de p, p->prox ->ant apontará para o nó anterior ao que foi removido.(seta azul)

Page 47: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 48: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 49: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

1) Através de seu ponteiro prox, p apontava para o próximo nó cuja representação é: p->prox. 2) Esse endereço foi copiado para o ponteiro prox do nó anterior acessado por p->ant->prox. (linha verde)  3) Sendo assim, após a remoção de p, p->ant->prox apontará para o nó seguinte ao que foi removido.(seta azul)

Page 50: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

1) Através de seu ponteiro prox, p apontava para o próximo nó cuja representação é: p->prox. 2) Esse endereço foi copiado para o ponteiro prox do nó anterior acessado por p->ant->prox. (linha verde)  3) Sendo assim, após a remoção de p, p->ant->prox apontará para o nó seguinte ao que foi removido.(seta azul)

Page 51: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 52: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

O nó descritor é criado para fazer referências ao primeiro e/ou ao ultimo nó. Por essa razão, seu uso facilita o acesso aos nós da lista. Seja para inserir, no início ou no fim, remover, do início ou do fim, etc.

Como o nó descritor pode conter, também, outras informações, optei por ter o total de nós da lista.

A única preocupação fica em ter que atualizá-lo na inserção e na remoção de um nó na lista, uma vez que o acesso a um nó da lista será feito através dele.

DESCRITOR

Page 53: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

struct listaDE { int info; struct listaDE* ant; struct listaDE* prox;};

1) Definindo a struct

Page 54: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

struct DE{ int tam; listaDE* prim; listaDE* ult;};

2) Definindo a struct

Page 55: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

DE *ptrDesc=new DE; ptrDesc->prim=NULL; ptrDesc->ult=NULL; ptrDesc->tam=0;

3) Inicialização

NULLNULL NULLNULL00

Page 56: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Page 57: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

Page 58: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

2323

Page 59: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

2323

ptrDescptrDesc

Page 60: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

Page 61: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

+=1+=1

Page 62: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

+=1+=1NULL ?NULL ?

ifif

Page 63: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

+=1+=1

ifif

Page 64: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

+=1+=1

elseelse

Page 65: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

ptAuxptAux

NULLNULL 2323

ptrDescptrDesc

+=1+=1

Page 66: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereInicio

Page 67: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

Page 68: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

2323

Page 69: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

NULLNULL2323

Page 70: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

ptrDescptrDesc

NULLNULL2323

+=1+=1

Page 71: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

ptrDescptrDesc

NULLNULL2323

+=1+=1

ifif

Page 72: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

ptrDescptrDesc

NULLNULL2323

+=1+=1

ifif

Page 73: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

ptrDescptrDesc

NULLNULL2323

+=1+=1

ifif

Page 74: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptAuxptAux

ptrDescptrDesc

NULLNULL2323

+=1+=1

ifif

NULLNULL

Page 75: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptUltptUltptrDescptrDesc

+=1+=1

elseelse

ptAuxptAux

NULLNULL2323

Page 76: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptUltptUltptrDescptrDesc

+=1+=1

elseelse

ptAuxptAux

NULLNULL2323

Page 77: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptUltptUltptrDescptrDesc

+=1+=1

elseelse

ptAuxptAux

NULLNULL2323

Page 78: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptUltptUltptrDescptrDesc

+=1+=1

elseelse

ptAuxptAux

NULLNULL2323

Page 79: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

ptUltptUltptrDescptrDesc

+=1+=1

elseelse

ptAuxptAux

NULLNULL2323

Page 80: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

insereFim

Page 81: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Exibe Inicio - Fim

ptrDescptrDesc

ptrptr

Page 82: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Exibe Inicio - Fim

Page 83: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Exibe Fim – Inicio

ptrDescptrDesc

ptrptr

Page 84: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Exibe Fim – Inicio

Page 85: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

Page 86: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

Page 87: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

NULLNULL

Page 88: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

NULLNULL NULLNULL

Page 89: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

NULLNULL-=1-=1NULLNULL

Page 90: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

ifif

NULLNULL00NULLNULL

Page 91: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

elseelse

Page 92: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

primprim

Page 93: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

primprim

Page 94: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

primprim

-=1-=1

Page 95: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeInicio

Page 96: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

Page 97: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

Page 98: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

NULLNULL

Page 99: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

NULLNULL NULLNULL

Page 100: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

NULLNULL NULLNULL-=1-=1

Page 101: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

ifif

NULLNULL NULLNULL 0 0

Page 102: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

elseelse

Page 103: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

elseelse

Page 104: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

Page 105: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

Page 106: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

auxaux

ptrDescptrDesc

elseelse

NULL

NULL

-=1-=1

Page 107: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

removeFim

Page 108: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Libera

Page 109: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

Resumindo

Page 110: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

#include <iostream>#include <cstdlib>using namespace std;struct listaDE { int info; struct listaDE* ant; struct listaDE* prox;};//ProtótiposlistaDE *insere(listaDE *LISTA, int valor);listaDE *insereFim(listaDE *LISTA, int valor);void exibeIpF(listaDE *LISTA);void exibeFpI(listaDE *LISTA);listaDE *remove(listaDE *LISTA, int valor);listaDE *busca (listaDE *LISTA, int valor);int contaNos(listaDE *LISTA);void libera(listaDE *LISTA);

#include <iostream>#include <cstdlib>using namespace std;struct listaDE { int info; struct listaDE* ant; struct listaDE* prox;};//ProtótiposlistaDE *insere(listaDE *LISTA, int valor);listaDE *insereFim(listaDE *LISTA, int valor);void exibeIpF(listaDE *LISTA);void exibeFpI(listaDE *LISTA);listaDE *remove(listaDE *LISTA, int valor);listaDE *busca (listaDE *LISTA, int valor);int contaNos(listaDE *LISTA);void libera(listaDE *LISTA);

Menu LDE sem Descritor

Page 111: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

int main(){ int op, valor; struct listaDE *lista= NULL; //inicializa a lista duplamente encadeada do { system("cls"); system("color 2f"); cout<<"\n\n( () ) Alocacao Dinamica ( () )"; cout<<"\n( )"; cout<<"\n( 1- Insere no Inicio )"; cout<<"\n( 2- Insere no Fim )"; cout<<"\n( 3- Remove da Lista DE )"; cout<<"\n( 4- Exibe a Lista DE IpF )"; cout<<"\n( 5- Exibe a Lista DE TpF )"; cout<<"\n( 6- Conta Nos da Lista DE )"; cout<<"\n( 7- Libera a Lista DE )"; cout<<"\n( 8- Sai )"; cout<<"\n( Opcao: )"; cout<<"\n( )"; cout<<"\n( ( ) ) ( ( ) ) ( ( ) ) ( ( ) )\n"; cin>>op;

int main(){ int op, valor; struct listaDE *lista= NULL; //inicializa a lista duplamente encadeada do { system("cls"); system("color 2f"); cout<<"\n\n( () ) Alocacao Dinamica ( () )"; cout<<"\n( )"; cout<<"\n( 1- Insere no Inicio )"; cout<<"\n( 2- Insere no Fim )"; cout<<"\n( 3- Remove da Lista DE )"; cout<<"\n( 4- Exibe a Lista DE IpF )"; cout<<"\n( 5- Exibe a Lista DE TpF )"; cout<<"\n( 6- Conta Nos da Lista DE )"; cout<<"\n( 7- Libera a Lista DE )"; cout<<"\n( 8- Sai )"; cout<<"\n( Opcao: )"; cout<<"\n( )"; cout<<"\n( ( ) ) ( ( ) ) ( ( ) ) ( ( ) )\n"; cin>>op;

Page 112: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

system("cls");system("color f2");switch(op) { case 1:cout<<"\nDigite valor a ser inserido: "; cin>>valor; lista = insere(lista, valor); break;

case 2:cout<<"\nDigite valor a ser inserido: "; cin>>valor; lista = insereFim(lista, valor); break; case 3:if(!lista) cout << "\n\nNada a remover. Lista vazia\n"; else { cout<<"\nDigite valor a ser removido: "; cin>>valor; lista=remove(lista, valor); } break;

system("cls");system("color f2");switch(op) { case 1:cout<<"\nDigite valor a ser inserido: "; cin>>valor; lista = insere(lista, valor); break;

case 2:cout<<"\nDigite valor a ser inserido: "; cin>>valor; lista = insereFim(lista, valor); break; case 3:if(!lista) cout << "\n\nNada a remover. Lista vazia\n"; else { cout<<"\nDigite valor a ser removido: "; cin>>valor; lista=remove(lista, valor); } break;

Page 113: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

case 4: if(!lista) cout << "\n\nLista vazia\n"; else exibeIpF(lista); break; case 5: if(!lista) cout << "\n\nLista vazia\n"; else exibeFpI(lista); break;

case 6:if(!lista) cout << "\n\nLista vazia\n"; else cout<<"\nTotal de nos: "<< contaNos(lista); break;

case 4: if(!lista) cout << "\n\nLista vazia\n"; else exibeIpF(lista); break; case 5: if(!lista) cout << "\n\nLista vazia\n"; else exibeFpI(lista); break;

case 6:if(!lista) cout << "\n\nLista vazia\n"; else cout<<"\nTotal de nos: "<< contaNos(lista); break;

Page 114: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

case 7: if(lista) cout<<"\nTem elementos na Lista\n"; else { libera(lista); cout<<"\nLiberando Memoria"; } break; case 8: cout<<"Fechando Lista Duplamente Encadedada\n"; break; default:cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); } while(op !=8); return 0;}

case 7: if(lista) cout<<"\nTem elementos na Lista\n"; else { libera(lista); cout<<"\nLiberando Memoria"; } break; case 8: cout<<"Fechando Lista Duplamente Encadedada\n"; break; default:cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); } while(op !=8); return 0;}

Page 115: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

// insere no início listaDE *insere(listaDE *LISTA, int valor){ listaDE* novo = new listaDE; novo->info = valor; novo->prox = LISTA; novo->ant = NULL; if (LISTA) { LISTA->ant = novo; } return novo;}

// insere no início listaDE *insere(listaDE *LISTA, int valor){ listaDE* novo = new listaDE; novo->info = valor; novo->prox = LISTA; novo->ant = NULL; if (LISTA) { LISTA->ant = novo; } return novo;}

Page 116: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//insere no fimlistaDE *insereFim(listaDE *LISTA, int valor){ listaDE *novo, *aux; novo = new listaDE; novo->info = valor; novo->prox = NULL; if (LISTA == NULL) { novo->ant = LISTA; LISTA = novo; } else { aux = LISTA; while (aux->prox != NULL) aux = aux->prox; aux->prox = novo; novo->ant = aux; } return LISTA;}

//insere no fimlistaDE *insereFim(listaDE *LISTA, int valor){ listaDE *novo, *aux; novo = new listaDE; novo->info = valor; novo->prox = NULL; if (LISTA == NULL) { novo->ant = LISTA; LISTA = novo; } else { aux = LISTA; while (aux->prox != NULL) aux = aux->prox; aux->prox = novo; novo->ant = aux; } return LISTA;}

Page 117: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

// exibe lista IpFvoid exibeIpF(listaDE *LISTA){ listaDE* ptr; cout<<"\nExibe a lista do primeiro para o ultimo\n"; for (ptr=LISTA; ptr != NULL; ptr=ptr->prox) cout<<"\n"<<ptr->info;} // exibe lista TpFvoid exibeFpI(listaDE *LISTA){ listaDE* ptr=LISTA; cout<<"\nExibe a lista do ultimo para o primeiro \n"; while(ptr->prox) { ptr=ptr->prox; } while(ptr!=LISTA) { cout<<"\n"<<ptr->info; ptr=ptr->ant; } cout<<"\n"<<ptr->info;}

// exibe lista IpFvoid exibeIpF(listaDE *LISTA){ listaDE* ptr; cout<<"\nExibe a lista do primeiro para o ultimo\n"; for (ptr=LISTA; ptr != NULL; ptr=ptr->prox) cout<<"\n"<<ptr->info;} // exibe lista TpFvoid exibeFpI(listaDE *LISTA){ listaDE* ptr=LISTA; cout<<"\nExibe a lista do ultimo para o primeiro \n"; while(ptr->prox) { ptr=ptr->prox; } while(ptr!=LISTA) { cout<<"\n"<<ptr->info; ptr=ptr->ant; } cout<<"\n"<<ptr->info;}

Page 118: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

// remove um elemento da lista listaDE *remove(listaDE* LISTA, int valor){ listaDE *p = busca(LISTA,valor); if (!p) { cout<< "\nValor nao achado\n"; return LISTA; } // nao achou o elemento

// retira elemento do encadeamento if (LISTA == p) LISTA = p->prox; else p->ant->prox = p->prox; if (p->prox ) p->prox->ant = p->ant; cout<<"\nValor removido\n"; delete p; return LISTA;}

// remove um elemento da lista listaDE *remove(listaDE* LISTA, int valor){ listaDE *p = busca(LISTA,valor); if (!p) { cout<< "\nValor nao achado\n"; return LISTA; } // nao achou o elemento

// retira elemento do encadeamento if (LISTA == p) LISTA = p->prox; else p->ant->prox = p->prox; if (p->prox ) p->prox->ant = p->ant; cout<<"\nValor removido\n"; delete p; return LISTA;}

Page 119: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

// busca valor na listalistaDE *busca (listaDE *LISTA, int valor){ listaDE *ptr; for (ptr=LISTA; ptr != NULL; ptr=ptr->prox) if (ptr->info == valor) return ptr; return NULL; // nao achou o elemento }

//conta nós da Listaint contaNos(listaDE *LISTA){ int conta = 0; while (LISTA != NULL) { conta++; LISTA = LISTA->prox; } return conta;}

// busca valor na listalistaDE *busca (listaDE *LISTA, int valor){ listaDE *ptr; for (ptr=LISTA; ptr != NULL; ptr=ptr->prox) if (ptr->info == valor) return ptr; return NULL; // nao achou o elemento }

//conta nós da Listaint contaNos(listaDE *LISTA){ int conta = 0; while (LISTA != NULL) { conta++; LISTA = LISTA->prox; } return conta;}

Page 120: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//liberavoid libera(listaDE *LISTA){ delete LISTA; LISTA=0;}

//liberavoid libera(listaDE *LISTA){ delete LISTA; LISTA=0;}

Page 121: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

#include <iostream>#include <cstdlib>using namespace std;

struct listaDE { int info; listaDE* ant; listaDE* prox;};

struct DE{ int tam; listaDE* prim; listaDE* ult;};

#include <iostream>#include <cstdlib>using namespace std;

struct listaDE { int info; listaDE* ant; listaDE* prox;};

struct DE{ int tam; listaDE* prim; listaDE* ult;};

Menu LDE com Descritor

Page 122: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//ProtótiposDE *insereFim(DE *ptrDesc, int valor);DE *insereInicio(DE *ptrDesc, int valor);void exibeIpF(DE *ptrDesc);void exibeTpF(DE *ptrDesc);void libera(DE *ptrDesc);void removerFim(DE *ptrDesc);void removerInicio(DE *ptrDesc);

int main(){ int op, valor; //inicializa a lista duplamente encadeada DE *ptrDesc=new DE; ptrDesc->prim=NULL; ptrDesc->ult=NULL; ptrDesc->tam=0;

//ProtótiposDE *insereFim(DE *ptrDesc, int valor);DE *insereInicio(DE *ptrDesc, int valor);void exibeIpF(DE *ptrDesc);void exibeTpF(DE *ptrDesc);void libera(DE *ptrDesc);void removerFim(DE *ptrDesc);void removerInicio(DE *ptrDesc);

int main(){ int op, valor; //inicializa a lista duplamente encadeada DE *ptrDesc=new DE; ptrDesc->prim=NULL; ptrDesc->ult=NULL; ptrDesc->tam=0;

Page 123: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

do { system("cls"); system("color 2f"); cout<<"\n\n( () ) Alocacao Dinamica ( () )"; cout<<"\n( )"; cout<<"\n( 1- Insere no Inicio )"; cout<<"\n( 2- Insere no Fim )"; cout<<"\n( 3- Remove no Inicio )"; cout<<"\n( 4- Remove no Fim )"; cout<<"\n( 5- Exibe a Lista DE IpF )"; cout<<"\n( 6- Exibe a Lista DE TpF )"; cout<<"\n( 7- Libera a Lista DE )"; cout<<"\n( 8- Sai )"; cout<<"\n( Opcao: )"; cout<<"\n( )"; cout<<"\n( ( ) ) ( ( ) ) ( ( ) ) ( ( ) )\n"; cin>>op;

do { system("cls"); system("color 2f"); cout<<"\n\n( () ) Alocacao Dinamica ( () )"; cout<<"\n( )"; cout<<"\n( 1- Insere no Inicio )"; cout<<"\n( 2- Insere no Fim )"; cout<<"\n( 3- Remove no Inicio )"; cout<<"\n( 4- Remove no Fim )"; cout<<"\n( 5- Exibe a Lista DE IpF )"; cout<<"\n( 6- Exibe a Lista DE TpF )"; cout<<"\n( 7- Libera a Lista DE )"; cout<<"\n( 8- Sai )"; cout<<"\n( Opcao: )"; cout<<"\n( )"; cout<<"\n( ( ) ) ( ( ) ) ( ( ) ) ( ( ) )\n"; cin>>op;

Page 124: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

system("cls"); system("color f2");switch(op){ case 1:cout<<"\nDigite valor a ser inserido no Inicio: "; cin>>valor; ptrDesc=insereInicio(ptrDesc, valor); break; case 2:cout<<"\nDigite valor a ser inserido no Fim: "; cin>>valor; ptrDesc=insereFim(ptrDesc, valor); break; case 3: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else removerInicio(ptrDesc); break;

system("cls"); system("color f2");switch(op){ case 1:cout<<"\nDigite valor a ser inserido no Inicio: "; cin>>valor; ptrDesc=insereInicio(ptrDesc, valor); break; case 2:cout<<"\nDigite valor a ser inserido no Fim: "; cin>>valor; ptrDesc=insereFim(ptrDesc, valor); break; case 3: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else removerInicio(ptrDesc); break;

Page 125: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

case 4: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else removerFim(ptrDesc); break; case 5: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else exibeIpF(ptrDesc); break;

case 6: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else exibeTpF(ptrDesc); break;

case 4: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else removerFim(ptrDesc); break; case 5: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else exibeIpF(ptrDesc); break;

case 6: if(ptrDesc->tam == 0) cout << "\n\nLista vazia\n"; else exibeTpF(ptrDesc); break;

Page 126: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

case 7: if(ptrDesc->tam != 0) cout<<"\nTem elementos na Lista\n"; else { libera(ptrDesc); cout<<"\nLiberando Memoria"; } break; case 8: cout<<"Fechando Lista Duplamente Encadedada\n"; break; default: cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); } while(op !=8); return 0;}

case 7: if(ptrDesc->tam != 0) cout<<"\nTem elementos na Lista\n"; else { libera(ptrDesc); cout<<"\nLiberando Memoria"; } break; case 8: cout<<"Fechando Lista Duplamente Encadedada\n"; break; default: cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); } while(op !=8); return 0;}

Page 127: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//insere no inicioDE *insereInicio(DE *ptrDesc, int valor){ listaDE *ptAux=new listaDE; if (ptAux != NULL) { //verifica se existe memória disponível ptAux->info = valor; ptAux->prox = ptrDesc->prim; ptAux->ant = NULL; ptrDesc->tam=ptrDesc->tam+1; if (ptrDesc->prim != NULL) { ptrDesc->prim->ant = ptAux; } else { ptrDesc->ult = ptAux; } //ajusta ponteiro para fim ptrDesc->prim=ptAux;//ajusta ponteiro início return ptrDesc; } else{ cout<<"\nSem memoria\n"; exit(-1);} }

//insere no inicioDE *insereInicio(DE *ptrDesc, int valor){ listaDE *ptAux=new listaDE; if (ptAux != NULL) { //verifica se existe memória disponível ptAux->info = valor; ptAux->prox = ptrDesc->prim; ptAux->ant = NULL; ptrDesc->tam=ptrDesc->tam+1; if (ptrDesc->prim != NULL) { ptrDesc->prim->ant = ptAux; } else { ptrDesc->ult = ptAux; } //ajusta ponteiro para fim ptrDesc->prim=ptAux;//ajusta ponteiro início return ptrDesc; } else{ cout<<"\nSem memoria\n"; exit(-1);} }

Page 128: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//insere no fimDE *insereFim(DE *ptrDesc, int valor){ listaDE *ptAux=new listaDE; listaDE *ptUlt; ptAux->info = valor; ptAux->prox = NULL; ptrDesc->tam=ptrDesc->tam+1; if (ptrDesc->ult == NULL) { ptrDesc->ult=ptAux; ptrDesc->prim=ptrDesc->ult; ptAux->ant=NULL; } else { ptUlt=ptrDesc->ult; ptUlt->prox=ptAux; ptAux->ant=ptUlt; ptrDesc->ult=ptAux; } return ptrDesc;}

//insere no fimDE *insereFim(DE *ptrDesc, int valor){ listaDE *ptAux=new listaDE; listaDE *ptUlt; ptAux->info = valor; ptAux->prox = NULL; ptrDesc->tam=ptrDesc->tam+1; if (ptrDesc->ult == NULL) { ptrDesc->ult=ptAux; ptrDesc->prim=ptrDesc->ult; ptAux->ant=NULL; } else { ptUlt=ptrDesc->ult; ptUlt->prox=ptAux; ptAux->ant=ptUlt; ptrDesc->ult=ptAux; } return ptrDesc;}

Page 129: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//remove do iniciovoid removerInicio(DE *ptrDesc){ listaDE *aux=new listaDE; if (ptrDesc->prim == ptrDesc->ult) { //lista com um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim = NULL; ptrDesc->ult = NULL; ptrDesc->tam=ptrDesc->tam - 1; } else { //lista com mais de um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim->prox->ant = NULL; ptrDesc->prim = ptrDesc->prim->prox; ptrDesc->tam=ptrDesc->tam - 1; } cout<<"\nRemovido: "<<aux->info;}

//remove do iniciovoid removerInicio(DE *ptrDesc){ listaDE *aux=new listaDE; if (ptrDesc->prim == ptrDesc->ult) { //lista com um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim = NULL; ptrDesc->ult = NULL; ptrDesc->tam=ptrDesc->tam - 1; } else { //lista com mais de um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim->prox->ant = NULL; ptrDesc->prim = ptrDesc->prim->prox; ptrDesc->tam=ptrDesc->tam - 1; } cout<<"\nRemovido: "<<aux->info;}

Page 130: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//remove do fimvoid removerFim(DE *ptrDesc){ listaDE *aux=new listaDE; if (ptrDesc->prim == ptrDesc->ult) { //lista com um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim = NULL; ptrDesc->ult = NULL; ptrDesc->tam=ptrDesc->tam - 1; } else { //lista com mais de um elemento aux->info=ptrDesc->ult->info; ptrDesc->ult->ant->prox = NULL; ptrDesc->ult = ptrDesc->ult->ant; ptrDesc->tam=ptrDesc->tam - 1; } cout<<"\nRemovido: "<<aux->info;}

//remove do fimvoid removerFim(DE *ptrDesc){ listaDE *aux=new listaDE; if (ptrDesc->prim == ptrDesc->ult) { //lista com um elemento aux->info=ptrDesc->prim->info; ptrDesc->prim = NULL; ptrDesc->ult = NULL; ptrDesc->tam=ptrDesc->tam - 1; } else { //lista com mais de um elemento aux->info=ptrDesc->ult->info; ptrDesc->ult->ant->prox = NULL; ptrDesc->ult = ptrDesc->ult->ant; ptrDesc->tam=ptrDesc->tam - 1; } cout<<"\nRemovido: "<<aux->info;}

Page 131: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

// exibe lista IpFvoid exibeIpF(DE *ptrDesc){ listaDE* ptr=ptrDesc->prim; cout<<"\nExibe a lista do primeiro para o ultimo\n"; for (int i=1; i<=ptrDesc->tam; i++) { cout<<"\n"<<ptr->info; ptr=ptr->prox; }}

// exibe lista TpFvoid exibeTpF(DE *ptrDesc){ listaDE* ptr=ptrDesc->ult; cout<<"\nExibe a lista do ultimo para o primeiro \n"; for (int i=ptrDesc->tam; i>=1; i--) { cout<<"\n"<<ptr->info; ptr=ptr->ant; }}

// exibe lista IpFvoid exibeIpF(DE *ptrDesc){ listaDE* ptr=ptrDesc->prim; cout<<"\nExibe a lista do primeiro para o ultimo\n"; for (int i=1; i<=ptrDesc->tam; i++) { cout<<"\n"<<ptr->info; ptr=ptr->prox; }}

// exibe lista TpFvoid exibeTpF(DE *ptrDesc){ listaDE* ptr=ptrDesc->ult; cout<<"\nExibe a lista do ultimo para o primeiro \n"; for (int i=ptrDesc->tam; i>=1; i--) { cout<<"\n"<<ptr->info; ptr=ptr->ant; }}

Page 132: ESTRUTURA DE DADOS Aula 10 – Listas Duplamente Encadeadas

ESTRUTURA DE DADOS

Listas Duplamente Encadeadas– Aula10

//liberavoid libera(DE *ptrDesc){ delete ptrDesc; ptrDesc=0;}

//liberavoid libera(DE *ptrDesc){ delete ptrDesc; ptrDesc=0;}