SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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;
        }
    }
}

Contenu connexe

Tendances

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano 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 e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: RecursividadeLoiane Groner
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em pythonCiro Rafael
 
Standard template library
Standard template libraryStandard template library
Standard template libraryJancypriya M
 
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Leinylson Fontinele
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoArthur Emanuel
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 

Tendances (20)

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
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 e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
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)
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
[Curso Java Basico - Orientacao a Objetos] Aula 35: Recursividade
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em python
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Standard template library
Standard template libraryStandard template library
Standard template library
 
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acesso
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 

En vedette

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 - 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
 
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
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03thomasdacosta
 

En vedette (18)

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 - 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
 
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
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
 

Similaire à 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
 

Plus de 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
 
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
 

Plus de Adriano Teixeira de Souza (17)

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

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