Prof. Adriano Teixeira de Souza
   Listas encadeadas ou listas ligadas    representam uma seqüência de objetos na    memória do computador.   Exemplo: L...
   Na lista de afazeres anterior, uma tarefa    dependia da execução da tarefa anterior                                  ...
1. Comprar   2 lâmpada         2. Trocar   3         lâmpada                 3. Procurar   4                    conta     ...
   Como representar a lista anterior em um       programa escrito na Linguagem C?       ◦ Primeira opção: vetores ou matr...
   Primeira opção: vetores ou matrizes       ◦ Como acrescentar “Ligar micro”?Tarefa:   Comprar Trocar Procurar   Pagar  ...
   Primeira opção: vetores ou matrizes    ◦ Os itens da lista são armazenados em posições      contíguas de memória.    ◦...
   Segunda opção: ponteiros    ◦ Estruturas de dados dinâmicas: estruturas de dados      que contém ponteiros para si pró...
   Representação gráfica de um elemento da lista:             campos de informação                                       ...
   Cada item em particular de uma lista pode ser    chamado de elemento, nó, célula, ou item.   O apontador para o iníci...
   Podemos realizar algumas operações sobre    uma lista encadeadas, tais como:    ◦ Inserir itens;    ◦ Retirar itens;  ...
   Outras operações possíveis:    ◦ Criar uma lista    ◦ Destruir uma lista    ◦ Ordenar uma lista    ◦ Intercalar duas l...
class NoLista {    float   info;    NoLista proximo;    public NoLista(float valor)    {       this.info = valor;       th...
   Para criar a lista propriamente dita, criaremos    a classe Lista, que manipula objetos do tipo    NoListaclass Lista ...
   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...
public void inserir(float valor) {  if (this.inicio == null) {    // lista vazia, então só é preciso criar o nó    this.in...
   O endereço armazenado em p será alterado caso    a lista esteja vazia ou   O campo proximo do último item será altera...
public void inserirNoFim(int valor) {  if (this.inicio == null) {    // lista vazia    this.inicio = new NoLista(valor);  ...
   Campo proximo do item a ser inserido recebe        o campo proximo do item posterior       Campo proximo do item ante...
   O endereço armazenado no ponteiro p deve    ser alterado para o endereço do item que    segue o primeiro item da lista...
   O campo proximo do último item será alterado    caso a lista contenha mais de um item ou   O endereço armazenado em p...
   Item antecessor recebe o campo proximo do        item a ser removido                lista[3].proximo ← lista[5].proxim...
void retira (float v) {//Em qualquer posicao    NoLista ant = null;    NoLista p = this.inicio;    while (p != null && p.i...
NoLista busca (float v){    int i=0;    for (NoLista p = this.inicio; p!=null; p=p.proximo){        if(p.info == v){      ...
void imprime (){  for(NoLista q=this.inicio;q!=null; q=q.proximo)     System.out.println(q.info);}                        ...
public static void main(String[] args){    Lista l = new Lista();    l.inserir(20.0f);    l.inserir(44.5f);    l.inserir(3...
void insereOrdenado ( float valor){       NoLista novoNo = new NoLista(valor );      NoLista ant = null;      NoLista p = ...
   Adicionado a C# 2.0 e posteriormente a Java 5   Classes Genéricas, que utilizam o conceito de “parâmetros tipo”<..> ...
class Lista<E> {  NoLista<E> inicio;    public Lista() {      this.inicio = null;    }    public void inserir(E elemento) ...
Próximos SlideShares
Carregando em…5
×

Estrutura de dados em Java - Filas

5.354 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
5.354
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
234
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Estrutura de dados em Java - Filas

  1. 1. Prof. Adriano Teixeira de Souza
  2. 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. 3.  Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior Próxima Ação atual ação
  4. 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. 5.  Como representar a lista anterior em um programa escrito na Linguagem C? ◦ Primeira opção: vetores ou matrizesTarefa: Comprar Trocar Procurar Pagar Desligar Dormir lâmpada lâmpada conta conta microÍndice: 1 2 3 4 5 6
  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. 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. 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. 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. 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. 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. 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. 13. class NoLista { float info; NoLista proximo; public NoLista(float valor) { this.info = valor; this.proximo = null; }} Prof. Adriano Teixeira de Souza
  14. 14.  Para criar a lista propriamente dita, criaremos a classe Lista, que manipula objetos do tipo NoListaclass 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. 15.  Podemos inserir itens: ◦ No início de uma lista ◦ No final de uma lista ◦ No meio de uma lista
  16. 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. 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. 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. 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. 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 inseridop 3 2 4 / 5 lista[5].proximo ← lista[2] lista[3].proximo ← 5
  21. 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. 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. 23.  Item antecessor recebe o campo proximo do item a ser removido lista[3].proximo ← lista[5].proximop 3 5 2 4 /
  24. 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. 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. 26. void imprime (){ for(NoLista q=this.inicio;q!=null; q=q.proximo) System.out.println(q.info);} Prof. Adriano Teixeira de Souza
  27. 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. 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. 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. 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; } }}

×