Listas Ligadas – Conceitos Avançados

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
Motivação para listas duplamente encadeadas e circulares
Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
TAD Deque ATAI.
Listas duplamente encadeadas
Gerenciamento de Arquivos, Páginas e Registros
Árvores.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Estruturas de Dados e Algoritmos
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
Lista Encadeada Circular Lista Duplamente Encadeada
1 3. Ao fazer as alterações no slide master, estas irão ser aplicadas a todos os diapositivos "dependentes" dele.
Métodos Programação II
Listas Encadeadas.
Algoritmos e Estruturas de Dados
Listas Simplesmente Encadeadas
ALGORITMOS E ESTRUTURAS DE DADOS
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.
Á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
Estruturas de Dados com Jogos
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.
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Estruturas de Dados com Jogos
Entendendo as definições de classe
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Pilhas Profa. Nádia Félix.
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
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Listas Simplesmente Encadeadas
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
Aula Prática 12 Listas Encadeadas Monitoria
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)
Lista Ligada Estrutura de Dados II Prof. Gale. Vantagens  Crescem (ou decrescem) à medida que elementos são inseridos (ou removidos)  seqüência encadeada.
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:

Listas Ligadas – Conceitos Avançados Estruturas de Dados e Algoritmos 26/03/2017 Fábio Lopes Caversan

Listas Circulares Dado um ponteiro p para um nó numa lista linear Não é possível atingir nenhum dos nós que antecedem o Node p Ao atravessar uma lista, o ponteiro externo deve ser preservado para não perdemos a lista Numa lista circular o campo Next do último nó, ao invés de ponteiro nulo, contém um ponteiro para o primeiro nó 26/03/2017 Fábio Lopes Caversan

Atingi-se qualquer ponto da lista, não importando o ponto de partida Último nó Primeiro nó Atingi-se qualquer ponto da lista, não importando o ponto de partida Não existe mais um “primeiro” e “último” nó natural Uma convenção é considerar o último nó como apontado pelo ponteiro externo (list). E o nó seguinte torna-se o primeiro nó Último nó: list Primeiro nó: list.Next Permite incluir/remover elemento a partir do início ou do final de uma lista Por convenção: ponteiro nulo representa uma lista circular vazia 26/03/2017 Fábio Lopes Caversan

Pilha como lista circular Seja stack um ponteiro para o último nó de uma lista circular O primeiro nó é o topo da pilha A função Empty pode ser: Empty () { return (stack == NULL); } 26/03/2017 Fábio Lopes Caversan

Chamando Push(x) public void Push (object x) { Node p; p = new Node ( ); p.Info = x; if (Empty ()) stack = p; else p.Next = stack.Next; stack.Next = p; } Push é mais complexa para lista circulares do que para listas lineares 26/03/2017 Fábio Lopes Caversan

Chamando Pop () public object Pop () { object x; Node p; if (Empty ()) throw new Exception (“Underflow da pilha”); p = stack.Next; x = p.Info; if ( p == stack) stack = NULL; /* só havia um nó na pilha */ else stack.Next = p.Next; p = NULL; return x; } 26/03/2017 Fábio Lopes Caversan

Agora é vez das filas . . . É mais fácil representar uma fila como lista circular do que lista linear É usado apenas um único ponteiro p p é o final da fila e nó seguinte é seu início A função Empty() é idêntica à da pilha Remove () é idêntica à pop, basta substituir stack por queue que é um ponteiro para a fila 26/03/2017 Fábio Lopes Caversan

Push (x); queue = queue.Next; Insert (x) equivale a: Push (x); queue = queue.Next; Isso significa que para inserir um elemento no final de uma fila circular, o elemento é inserido no início da fila e o ponteiro da lista circular avança um elemento para que o novo elemento ocupe o final. Chamando Insert(x) Insert (int x) { Node p; p = new Node( ); p.Info = x; if (Empty()) queue = p; else p.Next = queue.Next; queue.Next = p; queue = p; return; } 26/03/2017 Fábio Lopes Caversan

Operações primitivas para listas circulares InsertAfter(x) é semelhante à rotina das listas lineares public object DeleteAfter (Node p) { object x; Node q; if (( p == NULL || (p == p.Next)) throw new Exception(“Não há próximo nó para remover”); q = p.Next; x = q.Info; p.Next = q.Next; q = NULL; return x; } 26/03/2017 Fábio Lopes Caversan

Que tal um acordo para escolher O problema de Josephus Solução com lista circular Um grupo de soldados circundado por uma força inimiga esmagadora Não há esperanças de vitória O negócio é escapar . . . Mas só existe um cavalo disponível!!!! Que tal um acordo para escolher o soldado felizardo ? 26/03/2017 Fábio Lopes Caversan

É sorteado um número n de um chapéu e também o nome de um soldado Iniciando no soldado, eles começam a contar no sentido horário O soldado no qual a contagem n é finalizado, é retirado do círculo A contagem reinicia no soldado seguinte ao retirado do círculo Todo soldado que sair do círculo, não entra mais no processo O último soldado é o felizardo para escapar com o cavalo 26/03/2017 Fábio Lopes Caversan

Listas duplamente ligadas Uma lista circular tem vantagens sobre uma lista linear Mas apresenta várias deficiências: não dá para percorrê-la no sentido contrário, nem um nó pode ser ser eliminado, em função de apenas um ponteiro para esse nó Para sobrepujar a deficiências acima, o mais adequado é utilizar a lista duplamente ligada 26/03/2017 Fábio Lopes Caversan

Lista linear duplamente ligada nulo Lista linear duplamente ligada Lista circular duplamente ligada sem cabeçalho 26/03/2017 Fábio Lopes Caversan

Observações Cada nó tem dois ponteiros: um para seu predecessor e outro para seu sucessor De fato os termos predecessor e sucessor não fazem sentido, porque a listas duplamente ligadas são simétricas As listas duplamente ligadas podem ser lineares ou circulares e, podem conter ou não nó de cabeçalho Um nós tem três campos: Info, Prior e Next que contem ponteiros para os nós em ambos os lados 26/03/2017 Fábio Lopes Caversan

Inserindo um novo primeiro elemento numa lista duplamente ligada Info info null novo null Info Info Info null 26/03/2017 Fábio Lopes Caversan

Inserindo um novo elemento no meio de uma lista duplamente ligada Info info null novo Info null Info info null 26/03/2017 Fábio Lopes Caversan

Inserindo um novo último elemento numa lista duplamente ligada Info info null novo null Info null Info info 26/03/2017 Fábio Lopes Caversan

Apagando o primeiro elemento Info null Info Info null Excluído null null Info null Info null 26/03/2017 Fábio Lopes Caversan

Apagando o elemento do meio Info null Info Info null Info null Excluído null null Info null 26/03/2017 Fábio Lopes Caversan

Apagando o último elemento Info null Info Info null Info null Infp null Excluído null null 26/03/2017 Fábio Lopes Caversan

Representando o nó public class Node { object info; Node prior, next; ... // Gets e Sets }; 26/03/2017 Fábio Lopes Caversan

Eliminação de um nó em listas duplamente ligadas public object Delete (Node p) { object x; Node q,r; if (p == NULL) throw new Exception(“Renovação vazia”); x = p.Info; q = p.Prior; r = p.Next; q.Next = r; r.Prior = q; p = NULL; return; } 26/03/2017 Fábio Lopes Caversan

Inserindo um nó com informação x à direita de p InsertAfter (Node p, int x) { Node q,r; if (p == NULL) throw new Exception(“Inserção vazia”); q = new Node ( ); q.Info = x; r = p.Next; r.Prior = q; q.Next = r; q.Left = p; p.Next = q; return; } 26/03/2017 Fábio Lopes Caversan