8
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
3
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
3
Linguagens de Programação
IFSC
Texto de pré-visualização
Estruturas de Dados Linguagem C Listas Duplamente Encadeadas Prof Marcos Virgilio marcosvirgilioifscedubr Profa Lara P Z B Oberderfer larapopovifscedubr O encadeamento simples dificulta a retirada de elementos de uma lista Mesmo se tivermos o ponteiro do elemento que desejamos retirar temos que percorrer a lista elemento por elemento para encontrarmos o elemento anterior Nas listas duplamente encadeadas cada elemento tem um ponteiro para o próximo elemento e um ponteiro para o elemento anterior Podemos acessar os dois elementos adjacentes o próximo e o anterior Listas duplamente encadeadas Com uma estrutura duplamente encadeada podemos percorrer a lista nos dois sentidos primeiro ultimo e ultimo primeiro Listas duplamente encadeadas Uma lista duplamente encadeada é composta por um ponteiro para o primeiro elemento um ou mais campos em cada elemento para armazenar informações de negócio um ponteiro em cada elemento apontando para o próximo da lista ou com valor NULL se for o último da lista um ponteiro em cada elemento apontando para o elemento anterior da lista ou com valor NULL se for o primeiro da lista um ponteiro para o último elemento da lista Listas duplamente encadeadas include stdioh include stdlibh include stdboolh struct celula struct celula anterior struct celula proximo int informacao int main void int info cont 0 struct celula primeiro NULL struct celula ultimo NULL Exemplo do printfInforme o cod do equip scanfdinfo if info 0 struct celula novaCelula struct celula mallocsizeofstruct celula novaCelulainformacao info novaCelulaanterior NULL novaCelulaproximo NULL if primeiro NULL primeiro novaCelula ultimo novaCelula else novaCelulaanterior ultimo ultimoproximo novaCelula ultimo novaCelula while info 0 mostrando primeiro ultimo struct celula atual atual primeiro whileatual NULL printfd atual informacao atual atualproximo mostrando ultimo primeiro atual ultimo whileatual NULL printfd atual informacao atual atualanterior Referências Waldemar Celes e José Lucas Rangel Apostila de Estruturas de Dados PUCRIO Curso de Engenharia 2002 PEREIRA S L Estruturas de dados fundamentais conceitos e aplicações Edição 12 São Paulo Érica 2008 TENENBAUM A LAGSAM Y AUGENSTEIN M Estruturas de dados usando C São Paulo Pearson 1995 PREISS B R Estruturas de dados e algoritmos Padrões de Projeto orientado a objetos com Java Rio de Janeiro Elsevier 2001
8
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
3
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
1
Linguagens de Programação
IFSC
3
Linguagens de Programação
IFSC
Texto de pré-visualização
Estruturas de Dados Linguagem C Listas Duplamente Encadeadas Prof Marcos Virgilio marcosvirgilioifscedubr Profa Lara P Z B Oberderfer larapopovifscedubr O encadeamento simples dificulta a retirada de elementos de uma lista Mesmo se tivermos o ponteiro do elemento que desejamos retirar temos que percorrer a lista elemento por elemento para encontrarmos o elemento anterior Nas listas duplamente encadeadas cada elemento tem um ponteiro para o próximo elemento e um ponteiro para o elemento anterior Podemos acessar os dois elementos adjacentes o próximo e o anterior Listas duplamente encadeadas Com uma estrutura duplamente encadeada podemos percorrer a lista nos dois sentidos primeiro ultimo e ultimo primeiro Listas duplamente encadeadas Uma lista duplamente encadeada é composta por um ponteiro para o primeiro elemento um ou mais campos em cada elemento para armazenar informações de negócio um ponteiro em cada elemento apontando para o próximo da lista ou com valor NULL se for o último da lista um ponteiro em cada elemento apontando para o elemento anterior da lista ou com valor NULL se for o primeiro da lista um ponteiro para o último elemento da lista Listas duplamente encadeadas include stdioh include stdlibh include stdboolh struct celula struct celula anterior struct celula proximo int informacao int main void int info cont 0 struct celula primeiro NULL struct celula ultimo NULL Exemplo do printfInforme o cod do equip scanfdinfo if info 0 struct celula novaCelula struct celula mallocsizeofstruct celula novaCelulainformacao info novaCelulaanterior NULL novaCelulaproximo NULL if primeiro NULL primeiro novaCelula ultimo novaCelula else novaCelulaanterior ultimo ultimoproximo novaCelula ultimo novaCelula while info 0 mostrando primeiro ultimo struct celula atual atual primeiro whileatual NULL printfd atual informacao atual atualproximo mostrando ultimo primeiro atual ultimo whileatual NULL printfd atual informacao atual atualanterior Referências Waldemar Celes e José Lucas Rangel Apostila de Estruturas de Dados PUCRIO Curso de Engenharia 2002 PEREIRA S L Estruturas de dados fundamentais conceitos e aplicações Edição 12 São Paulo Érica 2008 TENENBAUM A LAGSAM Y AUGENSTEIN M Estruturas de dados usando C São Paulo Pearson 1995 PREISS B R Estruturas de dados e algoritmos Padrões de Projeto orientado a objetos com Java Rio de Janeiro Elsevier 2001