SlideShare a Scribd company logo
1 of 30
Prof. Adriano Teixeira de Souza
   Listas encadeadas ou listas ligadas
    representam uma seqüência de objetos na
    memória do computador.

   Exemplo: Lista de afazeres
    1.   Comprar uma lâmpada
    2.   Trocar uma lâmpada queimada
    3.   Procurar uma conta no quarto
    4.   Pagar uma conta na internet
    5.   Desligar o computador
    6.   Dormir
   Na lista de afazeres anterior, uma tarefa
    dependia da execução da tarefa anterior




                                     Próxima
                  Ação atual           ação
1. Comprar   2
 lâmpada

         2. Trocar   3
         lâmpada

                 3. Procurar   4
                    conta

                           4. Pagar       5
                            conta

                                      5. Desligar   6
                                         micro

                                                6. Dormir   fim
   Como representar a lista anterior em um
       programa escrito na Linguagem C?
       ◦ Primeira opção: vetores ou matrizes




Tarefa:   Comprar Trocar Procurar   Pagar   Desligar
                                                       Dormir
          lâmpada lâmpada conta     conta    micro
Índice:      1       2       3        4        5         6
   Primeira opção: vetores ou matrizes
       ◦ Como acrescentar “Ligar micro”?




Tarefa:   Comprar Trocar Procurar   Pagar
                                    Ligar   Desligar
                                                       Dormir
          lâmpada lâmpada conta     conta
                                    micro    micro
Índice:      1       2       3       4        5         6       7
   Primeira opção: vetores ou matrizes
    ◦ Os itens da lista são armazenados em posições
      contíguas de memória.

    ◦ A lista pode ser percorrida em qualquer direção.

    ◦ A inserção de um novo item pode ser realizada
      após o último item com custo constante.

    ◦ A inserção de um novo item no meio da lista requer
      um deslocamento de todos os itens localizados
      após o ponto de inserção.

    ◦ Retirar um item do início da lista requer um
      deslocamento de itens para preencher o espaço
      deixado vazio.
   Segunda opção: ponteiros
    ◦ Estruturas de dados dinâmicas: estruturas de dados
      que contém ponteiros para si próprias.



        class Lista {
           String nomeTarefa;
           float duracao;
           String responsavel;
           ...
                                       Referência para a
           Lista prox;
                                       própria classe Lista
        };
   Representação gráfica de um elemento da lista:
             campos de informação



                                                  próximo nó



    ◦ Cada item é encadeado com o seguinte, mediante uma
      variável do tipo ponteiro.
    ◦ Permite utilizar posições não contíguas de memória.
    ◦ É possível inserir e retirar elementos sem necessidade de
      deslocar os itens seguintes da lista.
   Cada item em particular de uma lista pode ser
    chamado de elemento, nó, célula, ou item.
   O apontador para o início da lista também é
    tratado como se fosse uma célula (cabeça), para
    simplificar as operações sobre a lista.
   O símbolo / representa o ponteiro nulo (null),
    indicando o fim da lista.


p
           3
                         5
                                      2
                                                     4   /
   Podemos realizar algumas operações sobre
    uma lista encadeadas, tais como:
    ◦ Inserir itens;
    ◦ Retirar itens;
    ◦ Buscar itens.

   Para manter a lista ordenada, após realizar
    alguma dessas operações, será necessário
    apenas movimentar alguns ponteiros (de um
    a três elementos).
   Outras operações possíveis:
    ◦ Criar uma lista
    ◦ Destruir uma lista
    ◦ Ordenar uma lista
    ◦ Intercalar duas listas
    ◦ Concatenar duas listas
    ◦ Dividir uma lista em duas
    ◦ Copiar uma lista em outra
class NoLista {

    float   info;
    NoLista proximo;

    public NoLista(float valor)
    {
       this.info = valor;
       this.proximo = null;
    }

}




                        Prof. Adriano Teixeira de Souza
   Para criar a lista propriamente dita, criaremos
    a classe Lista, que manipula objetos do tipo
    NoLista
class Lista {
  NoLista inicio;

    public Lista() {
      this.inicio = null;
    }
    // insere valor no começo da lista
    public void inserir(int valor) {...}
    // insere valor no fim da lista
    public void inserirNoFim(int valor) {...}
}
   Podemos inserir itens:
    ◦ No início de uma lista
    ◦ No final de uma lista
    ◦ No meio de uma lista
   O endereço armazenado no ponteiro p deve
    ser alterado para o endereço do item a ser
    acrescido à lista.




p        5           2          4   /


         3
public void inserir(float valor) {
  if (this.inicio == null) {
    // lista vazia, então só é preciso criar o nó
    this.inicio = new NoLista(valor);
  } else {
        // cria-se novo no e atualiza o NoLista inicio
        NoLista novoNo = new NoLista(valor);
        novoNo.proximo = this.inicio;
        this.inicio = novoNo;
    }
}




                                Prof. Adriano Teixeira de Souza
   O endereço armazenado em p será alterado caso
    a lista esteja vazia ou
   O campo proximo do último item será alterado.



         /



         p      3   /



         p      3           5   /
public void inserirNoFim(int valor) {
  if (this.inicio == null) {
    // lista vazia
    this.inicio = new NoLista(valor);
  } else {
    // procura pelo fim da lista
    NoLista atual = this.inicio;
    while (atual.proximo != null)
      atual = atual.proximo;
    // insere o nó no fim da lista
    atual.proximo = new NoLista(valor);
  }
}

                     Prof. Adriano Teixeira de Souza
   Campo proximo do item a ser inserido recebe
        o campo proximo do item posterior
       Campo proximo do item antecessor recebe o
        endereço do item a ser inserido



p           3               2                 4   /


                            5


                lista[5].proximo ← lista[2]

                lista[3].proximo ← 5
   O endereço armazenado no ponteiro p deve
    ser alterado para o endereço do item que
    segue o primeiro item da lista.


     p      5          2          4   /
   O campo proximo do último item será alterado
    caso a lista contenha mais de um item ou

   O endereço armazenado em p será alterado para
    null caso tenha somente um elemento.

         p      3           5   /



         p      3   /



         /
   Item antecessor recebe o campo proximo do
        item a ser removido


                lista[3].proximo ← lista[5].proximo




p           3            5              2             4   /
void retira (float v) {//Em qualquer posicao

    NoLista ant = null;
    NoLista p = this.inicio;

    while (p != null && p.info != v) {
       ant = p;
       p = p.proximo;
    }
    if (p != null){
      if (ant == null) {
         this.inicio = p.proximo;
      }else {
         ant.proximo = p.proximo;
      }
    };
}
NoLista busca (float v){
    int i=0;
    for (NoLista p = this.inicio; p!=null; p=p.proximo){
        if(p.info == v){
           System.out.println("nnachou “+i+”nn");
           return p;
        }
        i++;
    }
    return null;
}




                           Prof. Adriano Teixeira de Souza
void imprime (){
  for(NoLista q=this.inicio;q!=null; q=q.proximo)
     System.out.println(q.info);
}




                        Prof. Adriano Teixeira de Souza
public static void main(String[] args){

    Lista l = new Lista();
    l.inserir(20.0f);
    l.inserir(44.5f);
    l.inserir(33.3f);
    l.inserir(20.9f);
    l.imprime();
    NoLista n = l.busca(20.9f);//Busca
    if (n != null){
       System.out.println("Encontrado:"+n.info);
       l.retira(n.info);
    }
    System.out.println("Configuracao da lista:");
    l.imprime();
    //Libera memoria
    l = null;

}

                          Prof. Adriano Teixeira de Souza
void insereOrdenado ( float valor)
{
       NoLista novoNo = new NoLista(valor );

      NoLista ant = null;
      NoLista p = this.inicio;

      while (p != null && p.info < valor) {
             ant = p;
             p = p.proximo;
      }
      if (ant == null) {
             novoNo.proximo = this.inicio;
             this.inicio = novoNo;
      } else {
             novoNo.proximo = ant.proximo;
             ant.proximo = novoNo;
      }
}

                          Prof. Adriano Teixeira de Souza
   Adicionado a C# 2.0 e posteriormente a Java 5
   Classes Genéricas, que utilizam o conceito de “parâmetros tipo”<..>
   Lista com Genéricos: cada lista armazena um tipo específico, sem
    precisar criar código novo para cada tipo

        Sem Genéricos:
                                            Com Genéricos:
    class NoListaI{
      int valor;
      NoLista next;                     class NoLista<E> {
    }                                     E elemento;
                                          NoLista<E> next;
    class NoListaS{                     }
      String nome;
      NoLista next;
    }
class Lista<E> {
  NoLista<E> inicio;

    public Lista() {
      this.inicio = null;
    }
    public void inserir(E elemento) {
      if (this.inicio == null) {
        this.inicio = new NoLista<E>(elemento);
      } else {
            NoLista<E> novoNo = new NoLista<E>(elemento);
            novoNo.next = this.inicio;
            this.inicio = novoNo;
        }
    }
}

More Related Content

What's hot

Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasLeinylson Fontinele
 
DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURESbca2010
 
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...Edureka!
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File HandlingSunil OS
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 
Java Linked List Tutorial | Edureka
Java Linked List Tutorial |  EdurekaJava Linked List Tutorial |  Edureka
Java Linked List Tutorial | EdurekaEdureka!
 
Stack data structure
Stack data structureStack data structure
Stack data structureTech_MX
 
Ppt on Linked list,stack,queue
Ppt on Linked list,stack,queuePpt on Linked list,stack,queue
Ppt on Linked list,stack,queueSrajan Shukla
 
The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)Scott Wlaschin
 

What's hot (20)

Stack and Queue
Stack and Queue Stack and Queue
Stack and Queue
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Stack and queue
Stack and queueStack and queue
Stack and queue
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas Estáticas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURES
 
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File Handling
 
Queues
QueuesQueues
Queues
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 
Tabela Hash com Lista Encadeada
Tabela Hash com Lista EncadeadaTabela Hash com Lista Encadeada
Tabela Hash com Lista Encadeada
 
Linear data structure concepts
Linear data structure conceptsLinear data structure concepts
Linear data structure concepts
 
Java Linked List Tutorial | Edureka
Java Linked List Tutorial |  EdurekaJava Linked List Tutorial |  Edureka
Java Linked List Tutorial | Edureka
 
Stack data structure
Stack data structureStack data structure
Stack data structure
 
Ppt on Linked list,stack,queue
Ppt on Linked list,stack,queuePpt on Linked list,stack,queue
Ppt on Linked list,stack,queue
 
Linked list
Linked list Linked list
Linked list
 
The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)
 
file
filefile
file
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 

Viewers also liked

Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoPablo Silva
 
Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistemaFrancisco Mat
 
(ED1) Tópico 01 - Conceitos Básicos
(ED1) Tópico 01 - Conceitos Básicos(ED1) Tópico 01 - Conceitos Básicos
(ED1) Tópico 01 - Conceitos BásicosFabricio Narcizo
 

Viewers also liked (20)

Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
 
Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistema
 
(ED1) Tópico 01 - Conceitos Básicos
(ED1) Tópico 01 - Conceitos Básicos(ED1) Tópico 01 - Conceitos Básicos
(ED1) Tópico 01 - Conceitos Básicos
 
Introdução à Estrutura de Dados
Introdução à Estrutura de DadosIntrodução à Estrutura de Dados
Introdução à Estrutura de Dados
 

Similar to Estrutura de dados em Java - Filas (20)

Aula 17
Aula 17Aula 17
Aula 17
 
Aula 12
Aula 12Aula 12
Aula 12
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Aula 15
Aula 15Aula 15
Aula 15
 
Pged 04
Pged 04Pged 04
Pged 04
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem C
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Listas em C
Listas em CListas em C
Listas em C
 
Lista duplamente encadeada
Lista duplamente encadeadaLista duplamente encadeada
Lista duplamente encadeada
 
Lista Circular em Java
Lista Circular em JavaLista Circular em Java
Lista Circular em Java
 
Aula 13
Aula 13Aula 13
Aula 13
 
Aula 19
Aula 19Aula 19
Aula 19
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)
 
Slides collections
Slides collectionsSlides collections
Slides collections
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Aula 11
Aula 11Aula 11
Aula 11
 
Heap
HeapHeap
Heap
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 

More from Adriano Teixeira de Souza

Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 

More from Adriano Teixeira de Souza (16)

Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 

Estrutura de dados em Java - Filas

  • 2. Listas encadeadas ou listas ligadas representam uma seqüência de objetos na memória do computador.  Exemplo: Lista de afazeres 1. Comprar uma lâmpada 2. Trocar uma lâmpada queimada 3. Procurar uma conta no quarto 4. Pagar uma conta na internet 5. Desligar o computador 6. Dormir
  • 3. Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior Próxima Ação atual ação
  • 4. 1. Comprar 2 lâmpada 2. Trocar 3 lâmpada 3. Procurar 4 conta 4. Pagar 5 conta 5. Desligar 6 micro 6. Dormir fim
  • 5. Como representar a lista anterior em um programa escrito na Linguagem C? ◦ Primeira opção: vetores ou matrizes Tarefa: Comprar Trocar Procurar Pagar Desligar Dormir lâmpada lâmpada conta conta micro Índice: 1 2 3 4 5 6
  • 6. Primeira opção: vetores ou matrizes ◦ Como acrescentar “Ligar micro”? Tarefa: Comprar Trocar Procurar Pagar Ligar Desligar Dormir lâmpada lâmpada conta conta micro micro Índice: 1 2 3 4 5 6 7
  • 7. Primeira opção: vetores ou matrizes ◦ Os itens da lista são armazenados em posições contíguas de memória. ◦ A lista pode ser percorrida em qualquer direção. ◦ A inserção de um novo item pode ser realizada após o último item com custo constante. ◦ A inserção de um novo item no meio da lista requer um deslocamento de todos os itens localizados após o ponto de inserção. ◦ Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deixado vazio.
  • 8. Segunda opção: ponteiros ◦ Estruturas de dados dinâmicas: estruturas de dados que contém ponteiros para si próprias. class Lista { String nomeTarefa; float duracao; String responsavel; ... Referência para a Lista prox; própria classe Lista };
  • 9. Representação gráfica de um elemento da lista: campos de informação próximo nó ◦ Cada item é encadeado com o seguinte, mediante uma variável do tipo ponteiro. ◦ Permite utilizar posições não contíguas de memória. ◦ É possível inserir e retirar elementos sem necessidade de deslocar os itens seguintes da lista.
  • 10. Cada item em particular de uma lista pode ser chamado de elemento, nó, célula, ou item.  O apontador para o início da lista também é tratado como se fosse uma célula (cabeça), para simplificar as operações sobre a lista.  O símbolo / representa o ponteiro nulo (null), indicando o fim da lista. p 3 5 2 4 /
  • 11. Podemos realizar algumas operações sobre uma lista encadeadas, tais como: ◦ Inserir itens; ◦ Retirar itens; ◦ Buscar itens.  Para manter a lista ordenada, após realizar alguma dessas operações, será necessário apenas movimentar alguns ponteiros (de um a três elementos).
  • 12. Outras operações possíveis: ◦ Criar uma lista ◦ Destruir uma lista ◦ Ordenar uma lista ◦ Intercalar duas listas ◦ Concatenar duas listas ◦ Dividir uma lista em duas ◦ Copiar uma lista em outra
  • 13. class NoLista { float info; NoLista proximo; public NoLista(float valor) { this.info = valor; this.proximo = null; } } Prof. Adriano Teixeira de Souza
  • 14. Para criar a lista propriamente dita, criaremos a classe Lista, que manipula objetos do tipo NoLista class Lista { NoLista inicio; public Lista() { this.inicio = null; } // insere valor no começo da lista public void inserir(int valor) {...} // insere valor no fim da lista public void inserirNoFim(int valor) {...} }
  • 15. Podemos inserir itens: ◦ No início de uma lista ◦ No final de uma lista ◦ No meio de uma lista
  • 16. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item a ser acrescido à lista. p 5 2 4 / 3
  • 17. public void inserir(float valor) { if (this.inicio == null) { // lista vazia, então só é preciso criar o nó this.inicio = new NoLista(valor); } else { // cria-se novo no e atualiza o NoLista inicio NoLista novoNo = new NoLista(valor); novoNo.proximo = this.inicio; this.inicio = novoNo; } } Prof. Adriano Teixeira de Souza
  • 18. O endereço armazenado em p será alterado caso a lista esteja vazia ou  O campo proximo do último item será alterado. / p 3 / p 3 5 /
  • 19. public void inserirNoFim(int valor) { if (this.inicio == null) { // lista vazia this.inicio = new NoLista(valor); } else { // procura pelo fim da lista NoLista atual = this.inicio; while (atual.proximo != null) atual = atual.proximo; // insere o nó no fim da lista atual.proximo = new NoLista(valor); } } Prof. Adriano Teixeira de Souza
  • 20. Campo proximo do item a ser inserido recebe o campo proximo do item posterior  Campo proximo do item antecessor recebe o endereço do item a ser inserido p 3 2 4 / 5 lista[5].proximo ← lista[2] lista[3].proximo ← 5
  • 21. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item que segue o primeiro item da lista. p 5 2 4 /
  • 22. O campo proximo do último item será alterado caso a lista contenha mais de um item ou  O endereço armazenado em p será alterado para null caso tenha somente um elemento. p 3 5 / p 3 / /
  • 23. Item antecessor recebe o campo proximo do item a ser removido lista[3].proximo ← lista[5].proximo p 3 5 2 4 /
  • 24. void retira (float v) {//Em qualquer posicao NoLista ant = null; NoLista p = this.inicio; while (p != null && p.info != v) { ant = p; p = p.proximo; } if (p != null){ if (ant == null) { this.inicio = p.proximo; }else { ant.proximo = p.proximo; } }; }
  • 25. NoLista busca (float v){ int i=0; for (NoLista p = this.inicio; p!=null; p=p.proximo){ if(p.info == v){ System.out.println("nnachou “+i+”nn"); return p; } i++; } return null; } Prof. Adriano Teixeira de Souza
  • 26. void imprime (){ for(NoLista q=this.inicio;q!=null; q=q.proximo) System.out.println(q.info); } Prof. Adriano Teixeira de Souza
  • 27. public static void main(String[] args){ Lista l = new Lista(); l.inserir(20.0f); l.inserir(44.5f); l.inserir(33.3f); l.inserir(20.9f); l.imprime(); NoLista n = l.busca(20.9f);//Busca if (n != null){ System.out.println("Encontrado:"+n.info); l.retira(n.info); } System.out.println("Configuracao da lista:"); l.imprime(); //Libera memoria l = null; } Prof. Adriano Teixeira de Souza
  • 28. void insereOrdenado ( float valor) { NoLista novoNo = new NoLista(valor ); NoLista ant = null; NoLista p = this.inicio; while (p != null && p.info < valor) { ant = p; p = p.proximo; } if (ant == null) { novoNo.proximo = this.inicio; this.inicio = novoNo; } else { novoNo.proximo = ant.proximo; ant.proximo = novoNo; } } Prof. Adriano Teixeira de Souza
  • 29. Adicionado a C# 2.0 e posteriormente a Java 5  Classes Genéricas, que utilizam o conceito de “parâmetros tipo”<..>  Lista com Genéricos: cada lista armazena um tipo específico, sem precisar criar código novo para cada tipo Sem Genéricos: Com Genéricos: class NoListaI{ int valor; NoLista next; class NoLista<E> { } E elemento; NoLista<E> next; class NoListaS{ } String nome; NoLista next; }
  • 30. class Lista<E> { NoLista<E> inicio; public Lista() { this.inicio = null; } public void inserir(E elemento) { if (this.inicio == null) { this.inicio = new NoLista<E>(elemento); } else { NoLista<E> novoNo = new NoLista<E>(elemento); novoNo.next = this.inicio; this.inicio = novoNo; } } }