INE 5408 Estruturas de Dados Listas Encadeadas Pilhas
- Slides: 75
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é 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 24 89 12 4 55 20 A Pilha é uma estrutura de dados cujo funcionamento é inspirado no de uma pilha “natural”.
Pilhas usando Vetores 24 89 12 4 55 20 -1 4 3 2 1 0 5 Pilha cheia Pilha vazia • Vetores possuem um espaço limitado para armazenar dados; • necessitamos definir um espaço grande o suficiente para a nossa pilha;
Pilhas Encadeadas nro dados 3 info melão Cabeça • A estruturas é limitada pela De pilha memória disponível; • Não é necessário definir um próximo valor fixo para o tamanho da Pilha; info próximo maçã info Elemento de Pilha uva
Modelagem: Cabeça de Pilha • Necessitamos: – um ponteiro para o primeiro elemento da pilha; – um inteiro para indicar quantos elementos a pilha possui. • Pseudo-código: classe t. Pilha { t. Elemento *dados; inteiro tamanho; };
Modelagem: Elemento de Pilha • Necessitamos: – um ponteiro para o próximo elemento da pilha; – um campo do tipo da informação que vamos armazenar. • Pseudo-código: class t. Elemento { t. Elemento *próximo; tipo-que-eu-vou-usar-nesta-aplicação info; };
Modelagem: Elemento de Dados • Pseudo-código da Classe Tipo. Info: class Tipo. Info { tipo-do-campo 1; tipo-do-campo 2; … tipo-do-campo. N; } • Local: info. h
Modelagem da Pilha • Aspecto Funcional: – – colocar e retirar dados da pilha; testar se a pilha está vazia; testar se a pilha está CHEIA? ? C++. • Colocar e retirar dados da pilha: – Empilha(dado) – Desempilha() • Testar se a pilha está vazia ou cheia: – Pilha. Vazia • Inicializar ou limpar: – cria. Pilha
Algoritmo cria. Pilha MÉTODO cria. Pilha() //Inicializa a cabeça e o tamanho da pilha início dados <- NULO; tamanho <- 0; fim;
Algoritmo Pilha. Vazia Booleano MÉTODO pilha. Vazia() início SE (tamanho = 0) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim; • Um algoritmo Pilha. Cheia não existe aqui; • verificar se houve espaço na memória para um novo elemento será responsabilidade de cada operação de adição.
Algoritmo Empilha • Procedimento: – Alocamos um elemento; – fazemos o próximo deste novo elemento ser o primeiro da Pilha; – fazemos a cabeça de Pilha apontar para o novo elemento. • Parâmetros: – O tipo info (dado) a ser inserido;
Algoritmo Empilha • Semelhanças? ?
Algoritmo Empilha = Adiciona. No. Início 2 novo melão maçã uva doce azeda irkh caro cara barata
Algoritmo Empilha 32 melão maçã uva doce azeda irkh caro cara barata
Algoritmo Desempilha • Procedimento: – testamos se há elementos; – decrementamos o tamanho; – liberamos a memória do elemento; – devolvemos a informação.
Algoritmo Desempilha • Semelhanças? ?
Algoritmo Desempilha = Retira. Do. Início 3 saiu volta melão maçã uva doce azeda irkh caro cara barata
Algoritmo Desempilha 3 saiu volta melão maçã uva doce azeda irkh caro cara barata
Algoritmo Desempilha 2 saiu volta melão maçã uva doce azeda irkh caro cara barata
Algoritmo Desempilha Tipo. Info* MÉTODO retira. Do. Início() //Elimina o primeiro elemento de uma pilha. //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 (Vazia()) ENTÃO RETORNE(NULO); SENÃO saiu <- dados; volta <- saiu->info; dados <- saiu->próximo; tamanho <- tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;
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. Fila tam início fim Pseudo-código: classe 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 MÉTODO cria. Fila() //Inicializa a cabeça e o tamanho da fila início inicio <- NULO; fim <- NULO; tamanho <- 0; RETORNE(a. Fila); fim;
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 uva próximo
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 1 info uva próximo
Algoritmo Adiciona (Fila) inteiro MÉTODO adiciona(Tipo. Info *dado) variáveis t. Elemento *novo; //Variável auxiliar para o novo elemento. início novo <- aloque(t. Elemento); SE fila. Vazia(a. Fila) ENTÃO início <- novo SENÃO fim->próximo <- novo; FIM SE novo->próximo <- NULO; novo->info <- dado; fim <- novo; tamanho <- tamanho + 1; RETORNE(tamanho); FIM SE fim;
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 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 preciso de uma variável auxiliar sai. próximo
Algoritmo Retira (Fila) Caso especial: Fila Unitária tam início fim 0
Algoritmo Retira. Do. Início (Fila) Tipo. Info* MÉTODO retira. Do. Início() //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()) ENTÃO RETORNE(NULO) SENÃO saiu <- início; volta <- saiu->info; início <- saiu->próximo; //Se SAIU for o único, próximo é NULO e está certo. SE (tamanho = 1) ENTÃO //Fila unitária: devo anular o fim também. fim <- NULO; FIM SE tamanho <- tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;
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 doce azeda irkh caro cara barata
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: classe t. Lista. Dupla { t. Elemento. Duplo *dados; inteiro tamanho; };
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: classe 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 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: – Adiciona. Duplo(dado) – Adiciona. No. Início. Duplo(dado) – Adiciona. Na. Posição. Duplo(dado, posição) – Adiciona. Em. Ordem. Duplo(dado) – Retira. Duplo() – Retira. Do. Início. Duplo() – Retira. Da. Posição. Duplo(posição) – Retira. Específico. Duplo(dado)
Modelagem da Lista Duplamente Encadeada • Operações - testar a lista e outros testes: – Lista. Vazia. Duplo() – Posição. Duplo(dado) – Contém. Duplo(dado) • Operações - inicializar ou limpar: – Cria. Lista. Dupla() – Destrói. Lista. Dupla()
Algoritmo Cria. Lista. Dupla MÉtodo cria. Lista. Dupla() //Inicializa as variávels anterior <- NULO; sucessor <- NULO; tamanho <- 0; fim;
Algoritmo Lista. Vazia. Duplo Booleano Método lista. Vazia. Duplo() início SE (tamanho = 0) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;
Algoritmo Adiciona. No. Início. Duplo • Procedimento: – 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;
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 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çã uva doce azeda irkh caro cara barata
Algoritmo Adiciona. No. Início. Duplo Inteiro MÉTODO adiciona. No. Início. Duplo(Tipo. Info *dado) variáveis t. Elemento. Duplo *novo; //Variável auxiliar para o novo elemento. início novo <- aloque(t. Elemento. Duplo); novo->suc <- dados; novo->ant <- NULO; novo->info <- dado; dados <- novo; SE (novo->suc ~= NULO) ENTÃO novo->suc->ant <- novo; FIM SE; tamanho <- tamanho + 1; RETORNE(1); fim;
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.
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 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 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 irkh cara barata
Algoritmo Retira. Do. Início. Duplo Tipo. Info* MÉTODO retira. Do. Início. Duplo() //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()) ENTÃO RETORNE(NULO) SENÃO saiu <- dados; volta <- saiu->info; dados <- saiu->suc; SE (dados ~= NULO) ENTÃO dados->ant <- NULO; FIM SE tamanho <- tamanho - 1; LIBERE(saiu); RETORNE(volta); FIM SE fim;
Algoritmo Adiciona. Na. Posição. Duplo • Praticamente idêntico à lista encadeada; • procedimento: – 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;
Algoritmo Adiciona. Na. Posição Inteiro MÉTODO adiciona. Na. Posição. Duplo(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 > 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(info) SENÃO novo <- aloque(t. Elemento); SE (novo = NULO) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO anterior <- 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; tamanho <- tamanho + 1; RETORNE(tamanho); FIM SE fim;
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;
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 doce azeda irkh caro cara barata
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 irkh caro cara barata
Algoritmo Retira. Da. Posição. Duplo Tipo. Info* MÉTODO retira. Da. Posição. Duplo(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 > tamanho OU posição < 1) ENTÃO RETORNE(NULO) SENÃO SE (posição = 1) ENTÃO RETORNE(retira. Do. Início. Duplo()) SENÃO anterior <- 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 tamanho <- tamanho - 1; LIBERE(eliminar); RETORNE(volta); FIM SE fim;
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.
Algoritmo Adiciona. Em. Ordem. Duplo Inteiro Método adiciona. Em. Ordem. Duplo(Tipo. Info *dado) variáveis t. Elemento. Duplo *atual; //Variável auxiliar para caminhar. inteiro posição; início SE (lista. Vazia. Dupla()) ENTÃO RETORNE(adiciona. No. Início. Duplo( 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 <- 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(dado, posição + 1)) SENÃO RETORNE(adiciona. Na. Posição. Duplo(dado, posição)); FIM SE fim;
Algoritmos restantes Lista Duplamente Encadeada Por conta do aluno: • operações de inclusão e exclusão: – Adiciona. Duplo(dado) – Retira. Duplo() – Retira. Específico. Duplo(dado) • Operações - inicializar ou limpar: – Destrói. Lista. Dupla()
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 uma classe.
- Lista circular duplamente encadeada em c
- Rimas encadeadas
- Uma escola apresentava no final do ano o seguinte quadro
- Pilhão ecoponto
- Pilhas comerciais
- Listas lineares
- Listas de despacho
- Aunque subjuntivo
- Concatenar prolog
- Listas ordenadas en html
- Listas encadenadas
- Slidetodoc.com
- Listas enlazadas c#
- Listas doblemente enlazadas
- Listas 20 minutos
- Listas 20 minutos
- Listas m
- Tipos de listas
- Ine trial
- Leslie camilleri physics
- Iria ine
- Iné kafe členovia
- Simbolo ine
- Contoh suffix terminologi medis
- Impresion rainbow ine
- Blackboard ine
- Sueldo cuerpo de diplomados en estadística del estado
- Ine svenningdal
- Credencial ampliada al 200
- Denshin ine
- Compound inequality example
- Ine geodatos
- Bcps
- Semiotica
- Ine hope karlsen
- Nagebootste stoornis
- Forma de aço para concreto
- Pedro
- Teoria das estruturas
- Textura naturais e artificiais
- Estrutura do sistema respiratório
- Imagens de formas de relevo
- Estruturas homólogas e análogas
- Relevo do brasil
- Estruturas naturais e artificiais
- Flambagem
- Epitélio simples pavimentoso
- Teoria de gerber
- Estruturas homólogas e análogas
- Cerebelo estruturas
- Dobramentos modernos
- A grécia antiga não conheceu um estado centralizado
- Estrutura estaticamente indeterminada
- Estruturas sequenciais
- Estrutura linear
- Estruturas sensoriais
- Estruturas resistentes
- Teoria das estruturas
- Frase complexa coordenação e subordinação
- Estruturas do encefalo
- Localização do coração
- Estabilidade das estruturas
- Estrutura de dados
- O que é firebird
- Os dados x e y que faltam no quadro são
- Espacio muestral de 2 dados
- Modelagem de dados
- Ferramentas case utilizados para modelagem de dados
- Tipo abstrato de dados
- Os dados x e y que faltam no quadro são
- Estrutura de dados
- Simbologia rede de dados
- Mapeamento mer
- Rita comprou 6 caixas com 12 ovos
- Dado os intervalos reais abaixo represente os por extenso:
- Final inesperado de dados asn1