INE 5408 Estruturas de Dados Listas Encadeadas Pilhas

  • Slides: 58
Download presentation
INE 5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas -

INE 5408 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é

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 Pilha Encadeada altura topo 3 info próximo melão info próximo maçã info uva próximo

Pilhas Encadeadas • São pilhas onde os elementos são encadeados; – não há estouro

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. Pilha Encadeada altura topo 3 info próximo melão info próximo maçã info uva próximo

Filas • A Fila é uma estrutura de dados que simula uma fila da

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

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

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

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

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

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; –

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

Algoritmo Cria. Fila t. Fila* FUNÇÃO cria. Fila() //Retorna ponteiro para uma nova cabeça

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

Algoritmo Adiciona (Fila) tam início fim 2 info melão próximo info maçã próximo info

Algoritmo Adiciona (Fila) tam início fim 2 info melão próximo info maçã próximo info uva próximo

Algoritmo Adiciona (Fila) tam início fim 2 info melão próximo info maçã próximo info

Algoritmo Adiciona (Fila) tam início fim 2 info melão próximo info maçã próximo info uva próximo

Algoritmo Adiciona (Fila) tam início fim 3 info melão próximo info maçã próximo info

Algoritmo Adiciona (Fila) tam início fim 3 info melão próximo info maçã próximo info uva próximo

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia tam início fim 0 info uva próximo

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia tam início fim 0 info uva próximo

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia tam início fim 1 info uva próximo

Algoritmo Adiciona (Fila) Caso especial: Fila Vazia tam início fim 1 info uva próximo

Algoritmo Adiciona (Fila) Inteiro FUNÇÃO adiciona(t. Fila *a. Fila, Tipo. Info *dado) variáveis t.

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

Algoritmo Retira (Fila) tam início fim 3 sai info melão próximo info maçã próximo

Algoritmo Retira (Fila) tam início fim 3 sai info melão próximo info maçã próximo info uva próximo

Algoritmo Retira (Fila) tam início fim 3 sai info melão próximo info maçã próximo

Algoritmo Retira (Fila) tam início fim 3 sai info melão próximo info maçã próximo info uva próximo

Algoritmo Retira (Fila) tam início fim 2 info maçã próximo info uva próximo

Algoritmo Retira (Fila) tam início fim 2 info maçã próximo info uva próximo

Algoritmo Retira (Fila) Caso especial: Fila Unitária tam início fim 1 info uva Não

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

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

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

Algoritmo Retira. Do. Início (Fila) Tipo. Info* FUNÇÃO retira. Do. Início(t. Fila *a. Fila)

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

Exercício com Filas • Implemente o TAD Fila Encadeada com as suas duas operações

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 Assist. HAL; – utilize o seguinte Tipo. Info: 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 Assist. HAL leva em média duas semanas por pedido.

Listas Duplamente Encadeadas • A Lista Encadeada e a Fila Encadeada possuem a desvantagem

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 tam dados 3 ant info suc melão maçã uva

Listas Duplamente Encadeadas - Modelagem tam dados 3 ant info suc melão maçã uva doce azeda irkh caro cara barata

Modelagem: Cabeça de Lista. Dupla • Necessitamos: – um ponteiro para o primeiro elemento

Modelagem: Cabeça de Lista. Dupla • Necessitamos: – um ponteiro para o primeiro elemento da lista; – um inteiro para indicar quantos elementos a lista possui. • Pseudo-código: tipo t. Lista. Dupla { t. Elemento. Duplo *dados; inteiro tamanho; };

Modelagem: Elemento de Lista. Dupla • Necessitamos: – um ponteiro para o elemento anterior

Modelagem: Elemento de Lista. Dupla • 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 t. Elemento. Duplo { t. Elemento. Duplo *anterior; t. Elemento. Duplo *sucessor; Tipo. Info *info; };

Modelagem da Lista Duplamente Encadeada • Aspecto Funcional: – colocar e retirar dados da

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. tam dados 3 ant info suc melão maçã uva doce azeda irkh caro cara barata

Modelagem da Lista Duplamente Encadeada • Operações - colocar e retirar dados da lista:

Modelagem da Lista Duplamente Encadeada • Operações - colocar e retirar dados da lista: – Adiciona. Duplo(lista. Dupla, dado) – Adiciona. No. Início. Duplo(lista. Dupla, dado) – Adiciona. Na. Posição. Duplo(lista. Dupla, dado, posição) – Adiciona. Em. Ordem. Duplo(lista. Dupla, dado) – Retira. Duplo(lista. Dupla) – Retira. Do. Início. Duplo(lista. Dupla) – Retira. Da. Posição. Duplo(lista. Dupla, posição) – Retira. Específico. Duplo(lista. Dupla, dado)

Modelagem da Lista Duplamente Encadeada • Operações - testar a lista e outros testes:

Modelagem da Lista Duplamente Encadeada • Operações - testar a lista e outros testes: – Lista. Vazia. Duplo(lista. Dupla) – Posição. Duplo(lista. Dupla, dado) – Contém. Duplo(lista. Dupla, dado) • Operações - inicializar ou limpar: – Cria. Lista. Dupla() – Destrói. Lista. Dupla(lista. Dupla)

Algoritmo Cria. Lista. Dupla t. Lista. Dupla* FUNÇÃO cria. Lista. Dupla() //Retorna ponteiro para

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

Algoritmo Lista. Vazia. Duplo Booleano FUNÇÃO lista. Vazia. Duplo(t. Lista. Dupla *a. Lista) início

Algoritmo Lista. Vazia. Duplo Booleano FUNÇÃO lista. Vazia. Duplo(t. Lista. Dupla *a. Lista) início SE (a. Lista->tamanho = 0) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;

Algoritmo Adiciona. No. Início. Duplo • Procedimento: – testamos se é possível alocar um

Algoritmo Adiciona. No. Início. Duplo • 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 Lista. Dupla.

Algoritmo Adiciona. No. Início. Duplo tam dados 2 novo ant info suc melão maçã

Algoritmo Adiciona. No. Início. Duplo tam dados 2 novo ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Adiciona. No. Início. Duplo Caso novo->suc não seja nulo. . . tam Faço

Algoritmo Adiciona. No. Início. Duplo Caso novo->suc não seja nulo. . . tam Faço novo->suc->ant ser novo. . . dados 2 novo ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Adiciona. No. Início. Duplo tam dados 3 novo ant info suc melão maçã

Algoritmo Adiciona. No. Início. Duplo tam dados 3 novo ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Adiciona. No. Início. Duplo Inteiro FUNÇÃO adiciona. No. Início. Duplo(t. Lista. Dupla *a.

Algoritmo Adiciona. No. Início. Duplo Inteiro FUNÇÃO adiciona. No. Início. Duplo(t. Lista. Dupla *a. Lista, Tipo. Info *dado) variáveis t. Elemento. Duplo *novo; //Variável auxiliar para o novo elemento. início novo <- aloque(t. Elemento. Duplo); SE (novo = NULO) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO novo->suc <- a. Lista->dados; novo->ant <- NULO; novo->info <- dado; a. Lista->dados <- novo; SE (novo->suc ~= NULO) ENTÃO novo->suc->ant <- novo; FIM SE; a. Lista->tamanho <- a. Lista->tamanho + 1; RETORNE(1); FIM SE fim;

Algoritmo Retira. Do. Início. Duplo • Procedimento: – testamos se há elementos; – decrementamos

Algoritmo Retira. Do. Início. Duplo • 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 Lista. Dupla.

Algoritmo Retira. Do. Início. Duplo tam dados 3 ant info suc saiu volta ant

Algoritmo Retira. Do. Início. Duplo tam dados 3 ant info suc saiu volta ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc saiu volta ant

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc saiu volta ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc saiu volta ant

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc saiu volta ant info suc melão maçã uva doce azeda irkh caro cara barata

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc maçã uva azeda

Algoritmo Retira. Do. Início. Duplo tam dados 2 ant info suc maçã uva azeda irkh cara barata

Algoritmo Retira. Do. Início. Duplo Tipo. Info* FUNÇÃO retira. Do. Início. Duplo(t. Lista. Dupla

Algoritmo Retira. Do. Início. Duplo Tipo. Info* FUNÇÃO retira. Do. Início. Duplo(t. Lista. Dupla *a. Lista) //Elimina o primeiro elemento de uma lista duplamente encadeada. //Retorna a informação do elemento eliminado ou NULO. variáveis t. Elemento. Duplo *saiu; //Variável auxiliar para o primeiro elemento. Tipo. Info *volta; //Variável auxiliar para o dado retornado. início SE (lista. Vazia. Duplo(a. Lista)) ENTÃO RETORNE(NULO) SENÃO saiu <- a. Lista->dados; volta <- saiu->info; a. Lista->dados <- saiu->suc; SE (a. Lista->dados ~= NULO) ENTÃO a. Lista->dados->ant <- NULO; FIM SE a. Lista->tamanho <- a. Lista->tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;

Algoritmo Adiciona. Na. Posição. Duplo • Praticamente idêntico à lista encadeada; • procedimento: –

Algoritmo Adiciona. Na. Posição. Duplo • 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 Adiciona. Na. Posição Inteiro FUNÇÃO adiciona. Na. Posição. Duplo(t. Lista. Dupla *a. Lista,

Algoritmo Adiciona. Na. Posição Inteiro FUNÇÃO adiciona. Na. Posição. Duplo(t. Lista. Dupla *a. Lista, Tipo. Info *info, inteiro posição) //Adiciona novo elemento na posição informada. //Retorna o novo número de elementos da lista ou erro. variáveis t. Elemento. Duplo *novo, *anterior; //Ponteiros auxiliares. início SE (posição > a. Lista->tamanho + 1 OU posição < 1) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (posição = 1) ENTÃO RETORNE(adiciona. No. Início. Duplo(a. Lista, info) SENÃO novo <- aloque(t. Elemento); SE (novo = NULO) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO anterior <- a. Lista->dados; REPITA (posição - 2) VEZES anterior <- anterior->suc; novo->suc <- anterior->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; a. Lista->tamanho <- a. Lista->tamanho + 1; RETORNE(a. Lista->tamanho); FIM SE fim;

Algoritmo Retira. Da. Posição. Duplo • Mais simples que na Lista Encadeada; • procedimento:

Algoritmo Retira. Da. Posição. Duplo • 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 Retira. Da. Posição. Duplo Posições > 1 eliminar 4 melão maçã uva jaca

Algoritmo Retira. Da. Posição. Duplo Posições > 1 eliminar 4 melão maçã uva jaca doce azeda irkh caro cara barata

Algoritmo Retira. Da. Posição. Duplo Posições > 1 eliminar 4 melão maçã uva jaca

Algoritmo Retira. Da. Posição. Duplo Posições > 1 eliminar 4 melão maçã uva jaca doce azeda irkh caro cara barata

Algoritmo Retira. Da. Posição. Duplo Posições > 1 eliminar 3 melão maçã uva jaca

Algoritmo Retira. Da. Posição. Duplo Posições > 1 eliminar 3 melão maçã uva jaca doce azeda irkh caro cara barata

Algoritmo Retira. Da. Posição. Duplo Posições > 1 3 melão maçã jaca doce azeda

Algoritmo Retira. Da. Posição. Duplo Posições > 1 3 melão maçã jaca doce azeda irkh caro cara barata

Algoritmo Retira. Da. Posição. Duplo Tipo. Info* FUNÇÃO retira. Da. Posição. Duplo(t. Lista. Dupla

Algoritmo Retira. Da. Posição. Duplo Tipo. Info* FUNÇÃO retira. Da. Posição. Duplo(t. Lista. Dupla *a. Lista, inteiro posição) //Elimina o elemento da posição informada. //Retorna a informação do elemento eliminado ou NULO. variáveis t. Elemento. Duplo *anterior, *eliminar; //Variável auxiliar para elemento. Tipo. Info *volta; //Variável auxiliar para o dado retornado. início SE (posição > a. Lista->tamanho OU posição < 1) ENTÃO RETORNE(NULO) SENÃO SE (posição = 1) ENTÃO RETORNE(retira. Do. Início. Duplo(a. Lista)) SENÃO anterior <- a. Lista->dados; REPITA (posição - 2) VEZES anterior <- anterior->suc; eliminar <- anterior->suc; volta <- eliminar->info; anterior->suc <- eliminar->suc; SE eliminar->suc ~= NULO ENTÃO eliminar->suc->ant <- anterior; FIM SE a. Lista->tamanho <- a. Lista->tamanho - 1; LIBERE(eliminar); RETORNE(volta); FIM SE fim;

Algoritmo Adiciona. Em. Ordem. Duplo • Idêntico à lista encadeada; • procedimento: – necessitamos

Algoritmo Adiciona. Em. Ordem. Duplo • Idêntico à lista encadeada; • procedimento: – necessitamos de uma função para comparar os dados (maior); – procuramos pela posição onde inserir comparando dados; – chamamos adiciona. Na. Posição. Duplo(). • Parâmetros: – o dado a ser inserido. – a Lista. Dupla.

Algoritmo Adiciona. Em. Ordem. Duplo Inteiro FUNÇÃO adiciona. Em. Ordem. Duplo(t. Lista. Dupla *a.

Algoritmo Adiciona. Em. Ordem. Duplo Inteiro FUNÇÃO adiciona. Em. Ordem. Duplo(t. Lista. Dupla *a. Lista, Tipo. Info *dado) variáveis t. Elemento. Duplo *atual; //Variável auxiliar para caminhar. inteiro posição; início SE (lista. Vazia. Dupla(a. Lista)) ENTÃO RETORNE(adiciona. No. Início. Duplo(a. Lista, dado)) SENÃO atual <- a. Lista->dados; posição <- 1; ENQUANTO (atual->suc ~= NULO E maior(dado, atual->info)) FAÇA //Encontrar posição para inserir. atual <- atual->suc; posição <- posição + 1; FIM ENQUANTO SE maior(dado, atual->info) ENTÃO //Parou porque acabou a lista. RETORNE(adiciona. Na. Posição. Duplo(a. Lista, dado, posição + 1)) SENÃO RETORNE(adiciona. Na. Posição. Duplo(a. Lista, dado, posição)); FIM SE fim;

Algoritmos restantes Lista Duplamente Encadeada Por conta do aluno: • operações de inclusão e

Algoritmos restantes Lista Duplamente Encadeada Por conta do aluno: • operações de inclusão e exclusão: – Adiciona. Duplo(lista. Dupla, dado) – Retira. Duplo(lista. Dupla) – Retira. Específico. Duplo(lista. Dupla, dado) • Operações - inicializar ou limpar: – Destrói. Lista. Dupla(lista. Dupla)

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

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

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

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.