Lista Encadeada Circular Lista Duplamente Encadeada

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Estruturas de Dados Árvores Binárias
Recursividade Prof. Rosana Palazon.
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Listas duplamente encadeadas
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Árvores.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Listas Ligadas – Conceitos Avançados
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Listas Encadeadas.
Alocação Dinâmica de Memória
Algoritmos e Estruturas de Dados
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Aula 11 LISTAS LIGADAS.
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 9: Listas (parte 1)
Lista encadeada Representar um grupo de dados.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Listas Simplesmente Encadeadas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 17: Estruturas Genéricas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Prof. Alessandro Gonçalves
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Lista Encadeada Circular Lista Duplamente Encadeada

Estruturas Compostas Um nó em uma Lista Encadeada possui basicamente dois itens: ponteiro para o próximo informação armazenada Caso a informação não seja um dado simples: criar vários campos, um para cada informação Ex.: código, preço e quantidade de um produto

Estruturas Compostas typedef struct tp_no { int cod; float preco; int quant; struct tp_no *prox; } TPLISTA; TPLISTA *lista; ... lista->cod=1; lista->preco=10.5; lista->quant=20;

Estruturas Compostas p->info->preco typedef struct tp_no { TP_PROD *info; struct tp_no *prox; } TP_LISTA; TP_LISTA *lista; Para criar um nó, fazer duas alocações: uma para a estrutura do produto e outra para a estrutura do nó Se p for um ponteiro para um dado elemento desta lista, como acessar o Preço deste nó? Outra opção: campo da informação como um ponteiro para a estrutura TP_LISTA* aloca(void) { TP_PROD *pr=(TP_PROD*) malloc(sizeof(TP_PROD)); TP_LISTA *lst=(TP_LISTA*) malloc(sizeof(TP_LISTA)); lst->info = pr; lst->prox = NULL; return lst; } p->info->preco

Nós de Cabeçalho Nó adicional no início da lista que substitui o ponteiro para a lista A parte INFO pode ficar sem uso ou armazenar alguma informação global da lista, como o número de nós Se o campo INFO do cabeçalho não for do mesmo tipo que o resto da lista, será necessário criar outra estrutura para ele 6 9 7 3 6 9 7

Listas Circulares O último elemento tem como próximo o primeiro elemento da lista, formando um ciclo Útil quando: a busca é feita a partir de qualquer elemento não há ordenação na lista A rigor não existe "primeiro" ou "último" Ainda é necessário que exista um ponteiro para algum elemento, para a localização da lista por convenção, referência do primeiro ou do último 4 1 8 5 lista

Listagem void listagem (tplista *t) { tplista *p=t; if (t!=NULL) do { printf("Info: %d", p->info); p=p->prox; } while (p!=t); else printf("Lista Circular vazia!"); }

Lista Circular Inserção? Remoção?

Lista Circular - Pilha Por definição, uma Lista Circular não tem primeiro nem último elemento Uma convenção útil para implementar Pilhas é fazer o ponteiro apontar para o último elemento Neste caso, o nó seguinte ao ponteiro da Pilha será o nó do topo: Se PL é o ponteiro de uma pilha, PL->info é o último elemento e PL->prox->info é o elemento do topo E M R V Topo PL

Exemplo com Pilha - Push int push_circ (tplista **t, tpitem e) { tplista *novo; novo=aloca(sizeof(tplista)); if (novo==NULL) // sem espaço return 0; else { novo->info=e; if (*t==NULL) // primeiro *t= novo; else // não é o primeiro novo->prox=(*t)->prox; (*t)->prox=novo; return 1; }

Lista Duplamente Encadeada Útil quando é preciso percorrer a lista na ordem inversa Remoção de um elemento não precisa guardar anterior Remoção de um elemento cujo ponteiro é informado não precisar percorrer a fila toda Um conjunto maior de ligações precisam ser atualizadas

Lista Duplamente Encadeada Cada nó possui dois ponteiros: um para o elemento anterior e outro para o próximo elemento (ant e prox) ant prox lista a b c d

Listas Duplamente Encadeada typedef int tpitem; typedef struct tp_no { tpitem info; struct tp_no *ant; struct tp_no *prox; } tplista; tplista *lista;

Busca e Listagem Busca e Listagem: Código igual ao que é utilizado para a Lista Simplesmente Encadeada

Inserção no Início O novo elemento é encadeado no início da lista O seu próximo passa a ser o antigo primeiro elemento e o seu anterior é NULL Se a lista não estiver vazia, o anterior do o antigo primeiro passa a ser o novo elemento O ponteiro da lista é passado por referência e atualizado para apontar para o novo nó A função retornar 1 ou zero indicando o sucesso da inclusão lista a b e h

Inserção no Início int inseredupla_inicio (tplista **t, int valor) { tplista *novo; novo = aloca(sizeof(tplista)); if (!novo) return 0; else { novo->info = valor; novo->prox = *t; novo->ant = NULL; if ( (*t)!=NULL ) (*t)->ant=novo; (*t)=novo; }

Remoção A remoção é mais trabalhosa, pois é preciso acertar a cadeia nos dois sentidos Em compensação, pode-se retirar um elemento conhecendo-se apenas o ponteiro para ele Utiliza-se uma função de busca para localizar o elemento e em seguida o encadeamento é ajustado Ao final, o elemento é liberado

Remoção Sendo p o ponteiro para o elemento a ser excluído, se o elemento estiver no meio da lista, devemos fazer: p->ant->prox = p->prox; p->prox->ant = p->ant; Caso o elemento esteja em um extremo da lista, existem outras condições: se p for o primeiro, não se pode referenciar p->ant, pois ele é NULL; o mesmo acontece para p->prox quando é o último além disso, se for o primeiro, é preciso atualizar o ponteiro da lista

Remoção p lista b a e h p lista a b e h

Remoção Código? No Laboratório!!

Remoção int retira (tplista **t, int valor) { tplista *p; p=busca(*t,valor); if (p == NULL) return 0; /* não achou o elemento */ if (*t == p) *t=p->prox; /* primeiro elemento */ else p->ant->prox=p->prox; /* não é o primeiro */ if (p->prox!=NULL) /* não é o último */ p->prox->ant=p->ant; free(p); return 1; }

Lista Duplamente Encadeada e Circular Cada nó possui dois ponteiros: um para o elemento anterior e outro para o próximo elemento (ant e prox) O anterior do primeiro é o último e o próximo do último é o primeiro a b c d lista