INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.

Slides:



Advertisements
Apresentações semelhantes
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Advertisements

TADS – Tipos Abstratos de Dados
Listas duplamente encadeadas
ESTRUTURAS DO TIPO FILA
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas com Ponteiros Listas encadeadas Listas circulares.
Robson Godoi / Sandra Siebra
Listas Encadeadas.
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
Denise Guliato Faculdade de Computação – UFU
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estrutura de Dados Aula 02 1.
INE5408 Estruturas de Dados
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Aula 3 - Listas
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
INE5408 Estruturas de Dados Listas Encadeadas Simples.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Estrutura de Dados Prof. André Cypriano M. Costa
Funções Financeiras Parte 2. TAXA INTERNA DE RETORNO (TIR)  A Taxa Interna de Retorno (TIR) é outra medida de investimento, porém, diferentemente do.
Aula 5 Bioestatística. Estatísticas para uma variável.
Aula 01 Conhecendo o Computador Prof. Filipe Mutz.
M ICROSOFT W ORD 2007 C OMANDOS Disciplina - Intermática Prof.ª Andréia Vieira do Nascimento.
INE5408 Estruturas de Dados Aula 6b Listas Circulares.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Cálculo Numérico Computacional Prof. Linder Cândido da Silva.
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.
INE5408 Estruturas de Dados Passagem por Referência.
Guia de Referência para Fornecedores Visão Fornecedor.
Conhecendo o Tutorial support.ebsco.com. EBSCOhost é uma poderosa ferramenta de referência online que oferece uma variedade de bases de dados de texto.
Práticas Colaborativa de Programação Peterson Rodrigues Outubro de 2015.
1 Bibliografia 1. WIRTH, Niklaus. Algoritmos e estruturas de dados. 2. TENEMBAUM, Aaron. Estruturas de Dados usando C. 3. MORAES, Celso. Estruturas de.
Tecnologias e Linguagens para Banco de Dados I Prof. João Ricardo Andrêo 1/6/ :19 1 Respostas: 1. O que é um Sistema Gerenciador de Banco de Dados.
Redes de Computadores e Aplicações – Camada de Transporte IGOR ALVES.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Minicurso Java Básico Cristian Backy | Cristian Costa | Ruddá Beltrão.
Modos de endereçamento Considere uma linguagem Assembly fictícia na qual o primeiro operando será sempre o registrador destino. Vamos analisar o endereçamento.
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Estruturas Lineares de Dados Revisão Wolley W. Silva.
Jean Carlo Mendes
Programação Gráfica em Java Leiaute Aula Na aula passada vimos: Tratamento de eventos Fontes de eventos Ouvintes de eventos.
Laboratório de Computação Aula 05 – Array Prof. Fábio Dias
Operações no Sistema e-Contas da Responsabilidade das Unidades Técnicas Maio/2015.
Adriano A. Ribeiro. Escolha...Caso Em algumas situações é necessário termos várias soluções ligadas a respostas diferentes. Temos então o comando de alternativa.
INE5408 Estruturas de Dados Gerência de Arquivos.
CICLO BÁSICO GEOMETRIA OBJETIVOS Espera-se que o aluno:
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
Genius X nos Exercícios de Memória. O cérebro é um órgão, na realidade, o maior do corpo humano. Além destas características ele é sozinho, o responsável.
Jean Carlo Mendes ** Slides baseados no material do prof. Dr Guilherme Tavares de Assis (UFOP)
ESCOLHA DE LIVROS (PNLD – 2014) DISTRIBUIÇÃO DE LIVROS ANA CAROLINA SOUZA LUTTNER Coordenação de Apoio às Redes de Ensino.
Lógica de Programação – Forbellone / Eberspacher Lógica de Programação Capítulo 7 Estruturas de Dados Avançadas.
INE5408 Estruturas de Dados Árvores Rubro- Características Algoritmos.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
Lógica de programação Estruturas de seleção Estruturas de repetição Sub-Rotinas 1.
Revisão de Conceitos Thiago Medeiros Barros. Algoritmos Qualquer problema de computação pode ser resolvido executando uma série de ações em uma ordem.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Introdução - Pilhas usando Vetores - Filas usando Vetores.
CONFIABILIDADE NA MANUTENÇÃO Eng° José Wagner Braidotti Junior JWB Engenharia e Consultoria S/C Ltda. Outubro de 2010.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
MOVIMENTO EM DUAS E TRÊS DIMENSÕES
Calculo de Hoare Daniel Soares, Gabriel Alabarse Hernandez(150756) e Vanius Zapalowski(150843)
Aula 6 – Arrays.. Arrays Arrays em PHP são estruturas de dados mais sofisticadas e flexíveis do que em outras linguagens; Um array é uma seqüência ordenada.
Aula 5 Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI.
INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa.
MUTAÇÃO DE INTERFACE (MI) JACKSON ANTONIO DO PRADO LIMA SILVIA REGINA VERGILIO.
INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.
Filas Prof. Kariston Pereira
Transcrição da apresentação:

INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas

Extensões do conceito de Lista Encadeada A idéia da Lista Encadeada vista até agora é o modelo mais geral e simples; pode ser especializada e extendida das mais variadas formas: –Especializada: Pilhas encadeadas Filas –Extendida: Listas Duplamente Encadeadas Listas Circulares Simples e Duplas 3 alturatopo melão infopróximo maçã infopróximo uva infopróximo Pilha Encadeada

Pilhas Encadeadas São pilhas onde os elementos são encadeados; –não há estouro de pilha; –como o acesso de dados na pilha é puramente seqüencial, não há perda de eficiência. Existem apenas duas operações: –Empilhar: equivale a adicionar no início. –Desempilhar: equivale a retirar do início. É a forma como tradicionalmente pilhas são implementadas. 3 alturatopo melão infopróximo maçã infopróximo uva infopróximo Pilha Encadeada

Filas A Fila é uma estrutura de dados que simula uma fila da vida real. Possui duas operações básicas: –incluir no fim da fila; –retirar do começo da fila; –chamada de Estrutura-FIFO: First-In, First-Out - O primeiro que entrou é o primeiro a sair… Fila

Filas É uma estrutura de dados importantíssima para: –gerência de dados/processos por ordem cronológica: Fila de impressão em uma impressora de rede; Fila de pedidos de uma expedição ou tele-entrega. –simulação de processos seqüenciais: chão de fábrica: fila de camisetas a serem estampadas; comércio: simulação de fluxo de um caixa de supermercado; tráfego: simulação de um cruzamento com um semáforo. Fila

Filas É uma estrutura de dados importantíssima para: –gerência de dados/processos por ordem cronológica: Fila de impressão em uma impressora de rede; Fila de pedidos de uma expedição ou tele-entrega. –simulação de processos seqüenciais: chão de fábrica: fila de camisetas a serem estampadas; comércio: simulação de fluxo de um caixa de supermercado; tráfego: simulação de um cruzamento com um semáforo. Fila

Filas É uma estrutura de dados importantíssima para: –gerência de dados/processos por ordem cronológica: Fila de impressão em uma impressora de rede; Fila de pedidos de uma expedição ou tele-entrega. –simulação de processos seqüenciais: chão de fábrica: fila de camisetas a serem estampadas; comércio: simulação de fluxo de um caixa de supermercado; tráfego: simulação de um cruzamento com um semáforo. Fila

Filas É uma estrutura de dados importantíssima para: –gerência de dados/processos por ordem cronológica: Fila de impressão em uma impressora de rede; Fila de pedidos de uma expedição ou tele-entrega. –simulação de processos seqüenciais: chão de fábrica: fila de camisetas a serem estampadas; comércio: simulação de fluxo de um caixa de supermercado; tráfego: simulação de um cruzamento com um semáforo. Fila

Filas É uma estrutura de dados importantíssima para: –gerência de dados/processos por ordem cronológica: Fila de impressão em uma impressora de rede; Fila de pedidos de uma expedição ou tele-entrega. –simulação de processos seqüenciais: chão de fábrica: fila de camisetas a serem estampadas; comércio: simulação de fluxo de um caixa de supermercado; tráfego: simulação de um cruzamento com um semáforo. Fila

Filas: representação Extensão da lista encadeada: –referenciamos o último elemento também; –adicionamos no fim; –excluímos do início. 3 melão infopróximo maçã infopróximo uva infopróximo taminício fim Fila Elemento de Fila Pseudo-código: tipo tFila { tElemento *início; tElemento *fim; inteiro tamanho; };

Algoritmo CriaFila tFila* FUNÇÃO criaFila() // Retorna ponteiro para uma nova cabeça de fila ou NULO. variáveis tFila *aFila; início aFila <- aloque(tFila); SE (aFila ~= NULO) ENTÃO // Só posso inicializar se consegui alocar. aFila->tamanho <- 0; aFila->início <- NULO; aFila->fim <- NULO; FIM SE RETORNE(aFila); fim;

Algoritmo Adiciona (Fila) 2 melão infopróximo maçã infopróximo uva infopróximo taminício fim

Algoritmo Adiciona (Fila) 2 melão infopróximo maçã infopróximo uva infopróximo taminício fim

Algoritmo Adiciona (Fila) 3 melão infopróximo maçã infopróximo uva infopróximo taminício fim

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia 0 taminício fim uva infopróximo

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia 1 taminício fim uva infopróximo

Algoritmo Adiciona (Fila) Inteiro FUNÇÃO adiciona(tFila *aFila, TipoInfo *dado) variáveis tElemento *novo; //Variável auxiliar para o novo elemento. início novo <- aloque(tElemento); SE (novo = NULO) ENTÃO RETORNE(ERROFILACHEIA) SENÃO SE filaVazia(aFila) ENTÃO aFila->início <- novo SENÃO aFila->fim->próximo <- novo; FIM SE novo->próximo <- NULO; novo->info <- dado; aFila->fim <- novo; aFila->tamanho tamanho + 1; RETORNE(aFila->tamanho); FIM SE fim;

Algoritmo Retira (Fila) 3 melão infopróximo maçã infopróximo uva infopróximo taminício fim sai

Algoritmo Retira (Fila) 3 melão infopróximo maçã infopróximo uva infopróximo taminício fim sai

Algoritmo Retira (Fila) 2 maçã infopróximo uva infopróximo taminício fim

Algoritmo Retira (Fila) Caso especial: Fila Unitária 1 uva infopróximo taminício fim Não preciso de uma variável auxiliar sai.

Algoritmo Retira (Fila) Caso especial: Fila Unitária 0 taminício fim

Algoritmo RetiraDoInício (Fila) TipoInfo* FUNÇÃO retiraDoInício(tFila *aFila) //Elimina o primeiro elemento de uma fila. //Retorna a informação do elemento eliminado ou NULO. variáveis tElemento *saiu; //Variável auxiliar para o primeiro elemento. TipoInfo *volta; //Variável auxiliar para o dado retornado. início SE (filaVazia(aFila)) ENTÃO RETORNE(NULO) SENÃO saiu início; volta info; aFila->início próximo; //Se SAIU for o único, próximo é NULO e está certo. SE (aFila->tamanho = 1) ENTÃO //Fila unitária: devo anular o fim também. aFila->fim <- NULO; FIM SE aFila->tamanho tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;

Exercício com Filas Implemente o TAD Fila Encadeada com as suas duas operações de manipulação; implemente um programa principal de aplicação que utilize uma fila para: –ler dados de pedidos de solicitação de conserto de computadores da marca HAL pela sua assistência técnica AssistHAL; –utilize o seguinte TipoInfo: nome do solicitante, telefone, data da entrega (inserida automaticamente), modelo do computador e valor do conserto, que é um valor chutado. Após cadastrado um pedido, o sistema deverá informar quando o solicitante poderá contar com o computador pronto, sendo que: –a oficina AssistHAL leva em média duas semanas por pedido.

Listas Duplamente Encadeadas A Lista Encadeada e a Fila Encadeada possuem a desvantagem de somente podermos caminhar em uma direção: –vimos que para olhar um elemento pelo qual “acabamos de passar” precisamos de uma variável auxiliar “anterior”; –para olhar outros elementos ainda anteriores não temos nenhum meio, a não ser começar de novo. A Lista Duplamente Encadeada é uma estrutura de lista que permite deslocamento em ambos os sentidos: –útil para representar conjuntos de eventos ou objetos a serem percorridos em dois sentidos; –ex.: itinerários de ônibus, trem ou avião; –útil também quando realizamos uma busca aproximada e nos movemos para a frente e para trás.

Listas Duplamente Encadeadas - Modelagem 3 tamdados melão doce caro maçã azeda cara uva irkh barata antinfo sucantinfo sucantinfo suc

Modelagem: Cabeça de ListaDupla Necessitamos: –um ponteiro para o primeiro elemento da lista; –um inteiro para indicar quantos elementos a lista possui. Pseudo-código: tipo tListaDupla { tElementoDuplo *dados; inteiro tamanho; };

Modelagem: Elemento de ListaDupla Necessitamos: –um ponteiro para o elemento anterior na lista; –um ponteiro para o elemento sucessor na lista; –um ponteiro para a informação que vamos armazenar. Pseudo-código: tipo tElementoDuplo { tElementoDuplo *anterior; tElementoDuplo *sucessor; TipoInfo *info; };

Modelagem da Lista Duplamente Encadeada Aspecto Funcional: –colocar e retirar dados da lista; –testar se a lista está vazia e outros testes; –inicializá-la e garantir a ordem dos elementos. 3 tamdados melão doce caro maçã azeda cara uva irkh barata ant info suc ant info suc ant info suc

Modelagem da Lista Duplamente Encadeada Operações - colocar e retirar dados da lista: –AdicionaDuplo(listaDupla, dado) –AdicionaNoInícioDuplo(listaDupla, dado) –AdicionaNaPosiçãoDuplo(listaDupla, dado, posição) –AdicionaEmOrdemDuplo(listaDupla, dado) –RetiraDuplo(listaDupla) –RetiraDoInícioDuplo(listaDupla) –RetiraDaPosiçãoDuplo(listaDupla, posição) –RetiraEspecíficoDuplo(listaDupla, dado)

Modelagem da Lista Duplamente Encadeada Operações - testar a lista e outros testes: –ListaVaziaDuplo(listaDupla) –PosiçãoDuplo(listaDupla, dado) –ContémDuplo(listaDupla, dado) Operações - inicializar ou limpar: –CriaListaDupla() –DestróiListaDupla(listaDupla)

Algoritmo CriaListaDupla tListaDupla* FUNÇÃO criaListaDupla() //Retorna ponteiro para uma nova cabeça de lista ou NULO. variáveis tListaDupla*aLista; início aLista <- aloque(tListaDupla); SE (aLista ~= NULO) ENTÃO //Só posso inicializar se consegui alocar. aLista->tamanho <- 0; aLista->dados <- NULO; FIM SE RETORNE(aLista); fim;

Algoritmo ListaVaziaDuplo Booleano FUNÇÃO listaVaziaDuplo(tListaDupla *aLista) início SE (aLista->tamanho = 0) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;

Algoritmo AdicionaNoInícioDuplo Procedimento: –testamos se é possível alocar um elemento; –fazemos o sucessor deste novo elemento ser o primeiro da lista; –fazemos o seu antecessor ser NULO; –fazemos a cabeça de lista apontar para o novo elemento. Parâmetros: –o dado a ser inserido; –a ListaDupla.

Algoritmo AdicionaNoInícioDuplo novo 2 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc

Algoritmo AdicionaNoInícioDuplo novo 2 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc Caso novo->suc não seja nulo... Faço novo->suc->ant ser novo...

Algoritmo AdicionaNoInícioDuplo novo 3 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc

Algoritmo AdicionaNoInícioDuplo Inteiro FUNÇÃO adicionaNoInícioDuplo(tListaDupla *aLista, TipoInfo *dado) variáveis tElementoDuplo *novo; //Variável auxiliar para o novo elemento. início novo <- aloque(tElementoDuplo); SE (novo = NULO) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO novo->suc dados; novo->ant <- NULO; novo->info <- dado; aLista->dados <- novo; SE (novo->suc ~= NULO) ENTÃO novo->suc->ant <- novo; FIM SE; aLista->tamanho tamanho + 1; RETORNE(1); FIM SE fim;

Algoritmo RetiraDoInícioDuplo Procedimento: –testamos se há elementos; –decrementamos o tamanho; –se o elemento possuir sucessor, o antecessor do sucessor será NULO; –liberamos a memória do elemento; –devolvemos a informação. Parâmetros: –a ListaDupla.

Algoritmo RetiraDoInícioDuplo saiu volta 3 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc

Algoritmo RetiraDoInícioDuplo saiu volta 2 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc

Algoritmo RetiraDoInícioDuplo saiu volta 2 tamdados maçã azeda cara uva irkh barata melão doce caro antinfo sucantinfo sucantinfo suc

Algoritmo RetiraDoInícioDuplo 2 tamdados maçã azeda cara uva irkh barata antinfo sucantinfo suc

Algoritmo RetiraDoInícioDuplo TipoInfo* FUNÇÃO retiraDoInícioDuplo(tListaDupla *aLista) //Elimina o primeiro elemento de uma lista duplamente encadeada. //Retorna a informação do elemento eliminado ou NULO. variáveis tElementoDuplo *saiu; //Variável auxiliar para o primeiro elemento. TipoInfo *volta; //Variável auxiliar para o dado retornado. início SE (listaVaziaDuplo(aLista)) ENTÃO RETORNE(NULO) SENÃO saiu dados; volta info; aLista->dados suc; SE (aLista->dados ~= NULO) ENTÃO aLista->dados->ant <- NULO; FIM SE aLista->tamanho tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;

Algoritmo AdicionaNaPosiçãoDuplo Praticamente idêntico à lista encadeada; procedimento: –testamos se a posição existe e se é possível alocar elemento; –caminhamos até a posição; –adicionamos o novo dado na posição; –incrementamos o tamanho. Parâmetros: –o dado a ser inserido; –a posição onde inserir; –a Lista.

Algoritmo AdicionaNaPosição Inteiro FUNÇÃO adicionaNaPosiçãoDuplo(tListaDupla *aLista, TipoInfo *info, inteiro posição) //Adiciona novo elemento na posição informada. //Retorna o novo número de elementos da lista ou erro. variáveis tElementoDuplo *novo, *anterior; //Ponteiros auxiliares. início SE (posição > aLista->tamanho + 1 OU posição < 1) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (posição = 1) ENTÃO RETORNE(adicionaNoInícioDuplo(aLista, info) SENÃO novo <- aloque(tElemento); SE (novo = NULO) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO anterior dados; REPITA (posição - 2) VEZES anterior suc; novo->suc suc; SE (novo->suc ~= NULO ENTÃO //Se o novo não é o último da lista… novo->suc->ant <- novo; //Seto o antecessor do sucessor do novo. FIM SE novo->info <- info; anterior->suc <- novo; novo->ant <- anterior; aLista->tamanho tamanho + 1; RETORNE(aLista->tamanho); FIM SE fim;

Algoritmo RetiraDaPosiçãoDuplo Mais simples que na Lista Encadeada; procedimento: –testamos se a posição existe; –caminhamos até a posição; –retiramos o dado da posição; –decrementamos o tamanho. Parâmetros: –a posição de onde retirar; –a Lista.

Algoritmo RetiraDaPosiçãoDuplo 4 maçã azeda cara uva irkh barata melão doce caro jaca irkh barata eliminar Posições > 1

Algoritmo RetiraDaPosiçãoDuplo Posições > 1 4 maçã azeda cara uva irkh barata melão doce caro jaca irkh barata eliminar

Algoritmo RetiraDaPosiçãoDuplo Posições > 1 3 maçã azeda cara uva irkh barata melão doce caro jaca irkh barata eliminar

Algoritmo RetiraDaPosiçãoDuplo Posições > 1 3 maçã azeda cara melão doce caro jaca irkh barata

Algoritmo RetiraDaPosiçãoDuplo TipoInfo* FUNÇÃO retiraDaPosiçãoDuplo(tListaDupla *aLista, inteiro posição) //Elimina o elemento da posição informada. //Retorna a informação do elemento eliminado ou NULO. variáveis tElementoDuplo *anterior, *eliminar; //Variável auxiliar para elemento. TipoInfo *volta; //Variável auxiliar para o dado retornado. início SE (posição > aLista->tamanho OU posição < 1) ENTÃO RETORNE(NULO) SENÃO SE (posição = 1) ENTÃO RETORNE(retiraDoInícioDuplo(aLista)) SENÃO anterior dados; REPITA (posição - 2) VEZES anterior suc; eliminar suc; volta info; anterior->suc suc; SE eliminar->suc ~= NULO ENTÃO eliminar->suc->ant <- anterior; FIM SE aLista->tamanho tamanho - 1; LIBERE(eliminar); RETORNE(volta); FIM SE fim;

Algoritmo AdicionaEmOrdemDuplo Idêntico à lista encadeada; procedimento: –necessitamos de uma função para comparar os dados (maior); –procuramos pela posição onde inserir comparando dados; –chamamos adicionaNaPosiçãoDuplo(). Parâmetros: –o dado a ser inserido. –a ListaDupla.

Algoritmo AdicionaEmOrdemDuplo Inteiro FUNÇÃO adicionaEmOrdemDuplo(tListaDupla *aLista, TipoInfo *dado) variáveis tElementoDuplo *atual; //Variável auxiliar para caminhar. inteiro posição; início SE (listaVaziaDupla(aLista)) ENTÃO RETORNE(adicionaNoInícioDuplo(aLista, dado)) SENÃO atual dados; posição <- 1; ENQUANTO (atual->suc ~= NULO E maior(dado, atual->info)) FAÇA //Encontrar posição para inserir. atual suc; posição <- posição + 1; FIM ENQUANTO SE maior(dado, atual->info) ENTÃO //Parou porque acabou a lista. RETORNE(adicionaNaPosiçãoDuplo(aLista,dado,posição + 1)) SENÃO RETORNE(adicionaNaPosiçãoDuplo(aLista, dado, posição)); FIM SE fim;

Algoritmos restantes Lista Duplamente Encadeada Por conta do aluno: operações de inclusão e exclusão: –AdicionaDuplo(listaDupla, dado) –RetiraDuplo(listaDupla) –RetiraEspecíficoDuplo(listaDupla, dado) Operações - inicializar ou limpar: –DestróiListaDupla(listaDupla)

Exercício de Implementação 6 Implemente uma Lista de Rotas utilizando Listas Duplamente Encadeadas.

Exercício de Implementação 6 Este programa deverá gerenciar um conjunto de listas de rotas/linhas de uma companhia de ônibus intermunicipal do Estado de Santa Catarina; todas as rotas se iniciam em Florianópolis; cada rota possui um nome que a identifica de forma única, dado pelo destino. Ex: "Imbituba“; cada rota possui a lista de todas as cidades por onde o ônibus passa, para ir de Florianópolis ao destino; a rota de ônibus, ao retornar, passa pelos mesmos lugares. Portanto, pode ser representada por uma lista duplamente encadeada; o usuário deve poder escolher uma rota e poder navegar por ela, indo de cidade em cidade e voltando para a cidade anterior, usando para tanto as teclas de seta à esquerda e seta à direita; cada nodo representando uma cidade possui, além do nome, um texto descrevendo alguma característica desta cidade. Ex.: "Lá quebram as melhores ondas da costa sul do Brasil". Este texto é mostrado quando se visita um nodo.

Exercício de Implementação 6 Implemente o programa de rotas como uma lista de listas; a lista que contém todas as rotas pode ser uma lista encadeada ou uma lista em vetor; cada lista que representa uma rota deve ser uma lista duplamente encadeada; implemente tanto a lista de listas como a lista duplamente encadeada como um TAD separado com todas as suas funções.