bcc202 - estrutura de dados iparte_2)_(v4).pdfintrodução implementaçãoporponteiro conclusão...

41
Introdução Implementação por PONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected] Material elaborado com base nos slides do Prof. Túlio Toffolo (curso de 2013/01). 2014/01

Upload: others

Post on 08-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

BCC202 - Estrutura de Dados IAula 09: Listas (Parte 2)

Reinaldo Fortes

Universidade Federal de Ouro Preto, UFOPDepartamento de Computação, DECOM

Website: www.decom.ufop.br/reifortesEmail: [email protected]

Material elaborado com base nos slides do Prof. Túlio Toffolo (curso de 2013/01).

2014/01

Page 2: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conteúdo

1 Introdução

2 Implementação por PONTEIROLista Encadeada COM cabeçaLista Encadeada SEM cabeçaLista Duplamente Encadeada

3 Conclusão

4 Exercícios

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (2)

Page 3: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conteúdo

1 Introdução

2 Implementação por PONTEIROLista Encadeada COM cabeçaLista Encadeada SEM cabeçaLista Duplamente Encadeada

3 Conclusão

4 Exercícios

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (3)

Page 4: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Introdução

Sobre Listas

Na última aula (Parte 1):Dois tipos de listas: implementadas por ARRAY eimplementadas por PONTEIRO.

Exemplos de implementação de listas por ARRAY e operaçõesrelacionadas à implementação por PONTEIRO.

Implementação por PONTEIRO também é denominada deLista Encadeada (ou Lista Simplesmente Encadeada).

Na aula de hoje (Parte 2):Três variações de Lista Encadeada: COM Cabeça, SEMcabeça e Duplamente Encadeada.

Exemplos de código de listas COM e SEM cabeça.

Conceitos de lista Duplamente Encadeada.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (4)

Page 5: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conteúdo

1 Introdução

2 Implementação por PONTEIROLista Encadeada COM cabeçaLista Encadeada SEM cabeçaLista Duplamente Encadeada

3 Conclusão

4 Exercícios

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (5)

Page 6: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Características

Tamanho da lista não é pré-definido.

Cada elemento (célula) guarda quem é o próximo.

Elementos não estão contíguos na memória.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (6)

Page 7: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Elementos

Elemento da lista (Célula):Armazena as informações sobre cada elemento.

Aponta para o próximo elemento.

Assim, é definido como uma estrutura que possui:Campos representando as informações do elemento.

Ponteiro para o próximo elemento.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (7)

Page 8: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Elementos

Uma lista pode ter uma célula cabeça, antecedendo oprimeiro elemento.

Pode possuir também um apontador para o último elemento.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (8)

Page 9: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Estruturas básicas

1 typedef struct {2 /* Componentes de um item: "info" */3 } TItem ;45 typedef struct celula {6 struct celula * pProx ;7 TItem item;8 } TCelula ;910 typedef struct {11 TCelula *pPrimeiro , * pUltimo ;12 } TLista ;

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (9)

Page 10: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Operações básicas

14 /* Procedimentos e funções basicas da TAD */15 void TLista_Inicia ( TLista * pLista );16 int TLista_EhVazia ( TLista * pLista );17 int TLista_Insere ( TLista *pLista , TItem x);18 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX);19 void TLista_Imprime ( TLista * pLista );

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (10)

Page 11: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Criar Lista Vazia

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (11)

Page 12: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: Lista Vazia

21 /* Inicia as variáveis da lista */22 void TLista_Inicia ( TLista * pLista ) {23 pLista -> pPrimeiro = ( TCelula *) malloc ( sizeof (

TCelula ));24 pLista -> pUltimo = pLista -> pPrimeiro ;25 pLista ->pPrimeiro -> pProx = NULL;26 }2728 /* Retorna se a lista é vazia */29 int TLista_EhVazia ( TLista * pLista ) {30 return (pLista -> pPrimeiro == pLista -> pUltimo );31 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (12)

Page 13: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO de Novos Elementos

3 opções de posição onde se pode inserir:Primeira posição.

Última posição.

Após um elemento E.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (13)

Page 14: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO de Novos Elementos

3 opções de posição onde se pode inserir:Primeira posição.

Última posição.

Após um elemento E.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (13)

Page 15: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO na Última Posição

33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 return 1;40 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (14)

Page 16: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO na Última Posição

33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 return 1;40 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (14)

Page 17: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO na Última Posição

33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 return 1;40 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (14)

Page 18: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: INSERÇÃO na Última Posição

33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 return 1;40 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (14)

Page 19: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: RETIRADA de Elementos

3 opções de posição onde se pode retirar:Primeira posição.

Última posição.

Um elemento E.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (15)

Page 20: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: RETIRADA de Elementos

3 opções de posição onde se pode retirar:Primeira posição.

Última posição.

Um elemento E.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (15)

Page 21: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: RETIRADA na Primeira Posição

41 /* Retira o primeiro item da lista , retornando -o em *px */42 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {43 if ( TLista_EhVazia ( pLista ))44 return 0;45 TCelula *pAux;46 pAux = pLista ->pPrimeiro -> pProx ;47 *pX = pAux ->item;48 pLista ->pPrimeiro -> pProx = pAux -> pProx ;49 free(pAux);50 return 1;51 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (16)

Page 22: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: RETIRADA na Primeira Posição

41 /* Retira o primeiro item da lista , retornando -o em *px */42 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {43 if ( TLista_EhVazia ( pLista ))44 return 0;45 TCelula *pAux;46 pAux = pLista ->pPrimeiro -> pProx ;47 *pX = pAux ->item;48 pLista ->pPrimeiro -> pProx = pAux -> pProx ;49 free(pAux);50 return 1;51 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (16)

Page 23: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada COM cabeça

Lista Encadeada COM cabeça: RETIRADA na Primeira Posição

41 /* Retira o primeiro item da lista , retornando -o em *px */42 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {43 if ( TLista_EhVazia ( pLista ))44 return 0;45 TCelula *pAux;46 pAux = pLista ->pPrimeiro -> pProx ;47 *pX = pAux ->item;48 pLista ->pPrimeiro -> pProx = pAux -> pProx ;49 free(pAux);50 return 1;51 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (16)

Page 24: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: Características

Se diferencia da lista COM cabeça apenas pelo fato de quenão possui a célula cabeça, mas apenas um apontador para oprimeiro elemento.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (17)

Page 25: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: Estruturas básicas

1 typedef struct {2 /* Componentes de um item: "info" */3 } TItem ;45 typedef struct celula {6 struct celula * pProx ;7 TItem item;8 } TCelula ;910 typedef struct {11 TCelula *pPrimeiro , * pUltimo ;12 } TLista ;

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (18)

Page 26: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: Operações básicas

14 /* Procedimentos e funções basicas da TAD */15 void TLista_Inicia ( TLista * pLista );16 int TLista_EhVazia ( TLista * pLista );17 int TLista_Insere ( TLista *pLista , TItem x);18 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX);19 void TLista_Imprime ( TLista * pLista );

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (19)

Page 27: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: Lista Vazia

21 /* Inicia as variáveis da lista */22 void TLista_Inicia ( TLista * pLista ) {23 pLista -> pPrimeiro = NULL;24 pLista -> pUltimo = NULL;25 }2627 /* Retorna se a lista é vazia */28 int TLista_EhVazia ( TLista * pLista ) {29 return (pLista -> pPrimeiro == NULL);30 }

Na lista COM Cabeça tínhamos um código ligeiramente diferente:21 /* Inicia as variáveis da lista */22 void TLista_Inicia ( TLista * pLista ) {23 pLista -> pPrimeiro = ( TCelula *) malloc ( sizeof ( TCelula ));24 pLista -> pUltimo = pLista -> pPrimeiro ;25 pLista ->pPrimeiro -> pProx = NULL;26 }2728 /* Retorna se a lista é vazia */29 int TLista_EhVazia ( TLista * pLista ) {30 return (pLista -> pPrimeiro == pLista -> pUltimo );31 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (20)

Page 28: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: Lista Vazia

21 /* Inicia as variáveis da lista */22 void TLista_Inicia ( TLista * pLista ) {23 pLista -> pPrimeiro = NULL;24 pLista -> pUltimo = NULL;25 }2627 /* Retorna se a lista é vazia */28 int TLista_EhVazia ( TLista * pLista ) {29 return (pLista -> pPrimeiro == NULL);30 }

Na lista COM Cabeça tínhamos um código ligeiramente diferente:21 /* Inicia as variáveis da lista */22 void TLista_Inicia ( TLista * pLista ) {23 pLista -> pPrimeiro = ( TCelula *) malloc ( sizeof ( TCelula ));24 pLista -> pUltimo = pLista -> pPrimeiro ;25 pLista ->pPrimeiro -> pProx = NULL;26 }2728 /* Retorna se a lista é vazia */29 int TLista_EhVazia ( TLista * pLista ) {30 return (pLista -> pPrimeiro == pLista -> pUltimo );31 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (20)

Page 29: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: INSERÇÃO na Última Posição

32 /* Insere um item no final da lista */33 int TLista_Insere ( TLista *pLista , TItem x) {34 TCelula *novo = ( TCelula *) malloc ( sizeof ( TCelula ));35 novo ->Item = x;36 novo -> pProx = NULL;37 if ( TLista_EhVazia ( pLista )) {38 pLista -> pPrimeiro = novo;39 pLista -> pUltimo = novo;40 } else {41 pLista ->pUltimo -> pProx = novo;42 pLista -> pUltimo = novo;43 }44 }

Na lista COM Cabeça tínhamos um código muito diferente (mais simples):33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (21)

Page 30: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: INSERÇÃO na Última Posição

32 /* Insere um item no final da lista */33 int TLista_Insere ( TLista *pLista , TItem x) {34 TCelula *novo = ( TCelula *) malloc ( sizeof ( TCelula ));35 novo ->Item = x;36 novo -> pProx = NULL;37 if ( TLista_EhVazia ( pLista )) {38 pLista -> pPrimeiro = novo;39 pLista -> pUltimo = novo;40 } else {41 pLista ->pUltimo -> pProx = novo;42 pLista -> pUltimo = novo;43 }44 }

Na lista COM Cabeça tínhamos um código muito diferente (mais simples):33 /* Insere um item no final da lista */34 int TLista_Insere ( TLista *pLista , TItem x) {35 pLista ->pUltimo -> pProx =( TCelula *) malloc ( sizeof ( TCelula ));36 pLista -> pUltimo = pLista ->pUltimo -> pProx ;37 pLista ->pUltimo ->Item = x;38 pLista ->pUltimo -> pProx = NULL;39 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (21)

Page 31: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: RETIRADA na Primeira Posição

40 /* Retira o primeiro item da lista */41 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {42 if ( TLista_EhVazia ( pLista ))43 return 0;44 TCelula *pAux;45 pAux = pLista ->pPrimeiro -> pProx ;46 *pX = pAux ->item;47 pLista ->pPrimeiro -> pProx = pAux -> pProx ;48 free(pAux);49 return 1;50 }

Na lista COM Cabeça tínhamos um código exatamente igual:41 /* Retira o primeiro item da lista , retornando -o em *px */42 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {43 if ( TLista_EhVazia ( pLista ))44 return 0;45 TCelula *pAux;46 pAux = pLista ->pPrimeiro -> pProx ;47 *pX = pAux ->item;48 pLista ->pPrimeiro -> pProx = pAux -> pProx ;49 free(pAux);50 return 1;51 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (22)

Page 32: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Encadeada SEM cabeça

Lista Encadeada SEM cabeça: RETIRADA na Primeira Posição

40 /* Retira o primeiro item da lista */41 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {42 if ( TLista_EhVazia ( pLista ))43 return 0;44 TCelula *pAux;45 pAux = pLista ->pPrimeiro -> pProx ;46 *pX = pAux ->item;47 pLista ->pPrimeiro -> pProx = pAux -> pProx ;48 free(pAux);49 return 1;50 }

Na lista COM Cabeça tínhamos um código exatamente igual:41 /* Retira o primeiro item da lista , retornando -o em *px */42 int TLista_RetiraPrimeiro ( TLista *pLista , TItem *pX) {43 if ( TLista_EhVazia ( pLista ))44 return 0;45 TCelula *pAux;46 pAux = pLista ->pPrimeiro -> pProx ;47 *pX = pAux ->item;48 pLista ->pPrimeiro -> pProx = pAux -> pProx ;49 free(pAux);50 return 1;51 }

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (22)

Page 33: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Duplamente Encadeada

Lista Duplamente Encadeada: Características

Se diferencia das anteriores pelo fato de que cada elementoaponta para os elementos anterior e posterior a ele.

Muito útil quando ocorrem muitas inserções e remoções,principalmente de elementos intermediários.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (23)

Page 34: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Lista Duplamente Encadeada

Lista Duplamente Encadeada: Variações

Existem muitas variações da lista duplamente encadeada,muitas delas servem também para a lista encadeada. Algunsexemplos:

Com sentinelas: possui dois elementos especiais, que nãoarmazenam dados, os sentinelas, a cabeça da lista (head) ea cauda (tail). O elemento anterior da cabeça aponta semprepara NULL enquanto que no nó cauda quem aponta paraNULL é próximo.

Circular: conhecida como circular pois o primeiro elementoaponta para o último e vice-versa, formando assim um círculológico. pode ser implementado com sentinela ou não.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (24)

Page 35: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conteúdo

1 Introdução

2 Implementação por PONTEIROLista Encadeada COM cabeçaLista Encadeada SEM cabeçaLista Duplamente Encadeada

3 Conclusão

4 Exercícios

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (25)

Page 36: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conclusão

Conclusão

Nesta aula tivemos contato com novos exemplos deimplementação da estrutura de dados Lista.

O entendimento dos conceitos e das implementaçõesapresentadas nas duas aulas sobre este tópico são muitoimportantes para o entendimento das estruturas de dados queestão por vir.

Próxima aula: Pilhas.

Dúvidas?

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (26)

Page 37: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Conteúdo

1 Introdução

2 Implementação por PONTEIROLista Encadeada COM cabeçaLista Encadeada SEM cabeçaLista Duplamente Encadeada

3 Conclusão

4 Exercícios

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (27)

Page 38: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Exercícios propostos

Exercício 01

Do ponto de vista conceitual, foram vistas três formas deinserção e remoção de elementos de listas encadeadas.

No entanto, foi apresentado em aula apenas uma forma parainserção e uma para remoção.

Escolha uma forma de inserção e outra de remoção, nãoapresentada em sala de aula, e faça a sua implementação.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (28)

Page 39: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Exercícios propostos

Exercício 02

Faça uma pesquisa na Web e enumere vantagens edesvantagens das listas duplamente encadeadas.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (29)

Page 40: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Exercícios propostos

Exercício 03

Implemente uma TAD Lista Duplamente Encadeadaconsiderando as mesmas operações implementadas para aslistas encadeadas.

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (30)

Page 41: BCC202 - Estrutura de Dados Iparte_2)_(v4).pdfIntrodução ImplementaçãoporPONTEIRO Conclusão Exercícios BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes

Introdução Implementação por PONTEIRO Conclusão Exercícios

Exercícios propostos

Exercício 04

Procure entender o exemplo de aplicação apresentado no livrode Projetos de Algoritmos, de autoria de Nívio Ziviane,páginas 68 a 72 (vide bibliografia da disciplina).

O exemplo trata de uma aplicação de vestibular e retrata aimportância do uso de tipos abstratos de dados em aplicaçõesde grande porte.

OBS.: Este exemplo também encontra-se resumido nomaterial didático do professor Túlio Toffolo, ministrado em2013/01 (Aula 10: Listas (Parte 2)).

BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) (31)