brunolourencoyt

AED_Lista

May 17th, 2023
997
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.70 KB | None | 0 0
  1.     public class Lista {
  2.         private int nElementos;
  3.         private No cabeca;
  4.    
  5.         private class No {
  6.             No prox;
  7.             Object item;
  8.    
  9.             No(Object e) {
  10.                 item = e; // o item passa a ser o elemento
  11.                 prox = null; // o nó é inicializado com
  12.                 // prox a null (não há próximo)
  13.             }
  14.         }
  15.    
  16.         public Lista() {
  17.             cabeca = null;
  18.             nElementos = 0;
  19.         }
  20.        
  21.         public boolean eIndiceValido(int idx) {
  22.            
  23.             return idx < 0 && idx < nElementos -1;
  24.         }
  25.    
  26.         public void inserirCabeca(Object e) {
  27.             No novoNo = new No(e);
  28.             novoNo.prox = cabeca;
  29.             cabeca = novoNo;
  30.             nElementos++;
  31.         }
  32.    
  33.         public void inserirCauda(Object e) {
  34.             No novoNo = new No(e);
  35.             if (cabeca == null) {
  36.                 cabeca = novoNo;
  37.                 nElementos++;
  38.                 return;
  39.             }
  40.             No ultimo = cabeca;
  41.             while (ultimo.prox != null)
  42.                 ultimo = ultimo.prox;
  43.             ultimo.prox = novoNo;
  44.             nElementos++;
  45.         }
  46.    
  47.         public void inserir(Object e, int idx) {
  48.             if (!eIndiceValido(idx))
  49.                 throw new ArrayIndexOutOfBoundsException(idx);
  50.             No novoNo = new No(e);
  51.             int posActual = 0;
  52.             No actual = cabeca;
  53.             No anterior = null;
  54.             while (actual != null && posActual < idx) {
  55.                 anterior = actual;
  56.                 actual = actual.prox;
  57.                 posActual++;
  58.             }
  59.             novoNo.prox = actual;
  60.             if (anterior == null)
  61.                 cabeca = novoNo;
  62.             else
  63.                 anterior.prox = novoNo;
  64.             nElementos++;
  65.         }
  66.    
  67.         public int procurar(Object e) {
  68.             No actual = cabeca;
  69.             int pos = 0;
  70.             while (actual != null && !actual.item.equals(e)) {
  71.                 actual = actual.prox;
  72.                 pos++;
  73.             }
  74.             return actual == null ? -1 : pos;
  75.         }
  76.    
  77.         public int procurarordenado( Object e ) {
  78.             No actual = cabeca;
  79.             int pos = 0;
  80.             while( actual != null && actual.item.equals( e )) {
  81.             actual = actual.prox;
  82.             pos++;
  83.             }
  84.             if( actual != null && actual.item.equals( e ))
  85.             return pos;
  86.             return -1;
  87.             }
  88.        
  89.         public void retirar(int idx) {
  90.             if (!eIndiceValido(idx))
  91.                 throw new ArrayIndexOutOfBoundsException(idx);
  92.             No actual = cabeca;
  93.             No anterior = null;
  94.             int pos = 0;
  95.             while (actual != null && pos < idx) {
  96.                 anterior = actual;
  97.                 actual = actual.prox;
  98.                 pos++;
  99.             }
  100.             if (anterior != null)
  101.                 anterior.prox = actual.prox;
  102.             else
  103.                 cabeca = actual.prox;
  104.             nElementos--;
  105.         }
  106.    
  107.         public void limpar() {
  108.             cabeca = null;
  109.             nElementos = 0;
  110.         }
  111.    
  112.         class ListaElemento {
  113.            
  114.             public int procura( Object e, int posIni ){
  115.                 No actual = cabeca;//*****
  116.                 for( int i = posIni; i < nElementos; i++ )
  117.                 if( actual.item.equals( e ) )
  118.                 return i;
  119.                 return -1;
  120.                 }
  121.             public int procura(Object e) {
  122.                 return procura(e, 0);
  123.             }
  124.         }
  125.    
  126.         public int procura(Object e, int posIni) {
  127.             if (!eIndiceValido(posIni))
  128.                 throw new ArrayIndexOutOfBoundsException(posIni);
  129.             No actual = cabeca;
  130.             int pos = 0;
  131.             while (pos < posIni) { // ir até posição inicial
  132.                 actual = actual.prox;
  133.                 pos++;
  134.             }
  135.             while (actual != null && !actual.item.equals(e)) {
  136.                 pos++;
  137.                 actual = actual.prox;
  138.             }
  139.             return actual == null ? -1 : pos;
  140.         }
  141.    
  142.         public int procuraFim(Object e) {
  143.             return procuraFim(e, nElementos);
  144.         }
  145.    
  146.         public int procuraFim(Object e, int posFim) {
  147.             if (!eIndiceValido(posFim))
  148.                 throw new ArrayIndexOutOfBoundsException(posFim);
  149.             No actual = cabeca;
  150.             int pos = 0;
  151.             int ultimaPos = -1;
  152.             while (actual != null && pos < posFim) {
  153.                 if (actual.item.equals(e))
  154.                     ultimaPos = pos;
  155.                 pos++;
  156.                 actual = actual.prox;
  157.             }
  158.             return ultimaPos;
  159.         }
  160.    
  161.         public boolean estaPresente(Object e) {
  162.             return procura(e) != -1;
  163.         }
  164.    
  165.         public int numRepeticoes(Object e) {
  166.             No actual = cabeca;
  167.             int nVezes = 0;
  168.             while (actual != null) {
  169.                 if (actual.item.equals(e))
  170.                     nVezes++;
  171.                 actual = actual.prox;
  172.             }
  173.             return nVezes;
  174.         }
  175.    
  176.         public void retirar(Object e) {
  177.             // solução pouco eficaz!!!
  178.             int idx = procura(e);
  179.             if (idx != -1)
  180.                 retirar(idx);
  181.         }
  182.    
  183.         public Object get(int idx) {
  184.             if (!eIndiceValido(idx))
  185.                 throw new ArrayIndexOutOfBoundsException(idx);
  186.             No actual = cabeca;
  187.             int pos = 0;
  188.             while (pos < idx) {
  189.                 pos++;
  190.                 actual = actual.prox;
  191.             }
  192.             return actual.item;
  193.         }
  194.    
  195.         public Object set(Object e, int idx) {
  196.             if (!eIndiceValido(idx))
  197.                 throw new ArrayIndexOutOfBoundsException(idx);
  198.             No actual = cabeca;
  199.             int pos = 0;
  200.             while (pos < idx) {
  201.                 pos++;
  202.                 actual = actual.prox;
  203.             }
  204.             Object antigo = actual.item;
  205.             actual.item = e;
  206.             return antigo;
  207.         }
  208.     //
  209.     //  public void inserirCauda(Object e) {
  210.     //      No novoNo = new No(e);
  211.     //      No cauda; //*****
  212.     //      if (cabeca == null) // lista vazia
  213.     //          cabeca = novoNo;
  214.     //      else
  215.     //          cauda.prox = novoNo;
  216.     //      cauda = novoNo;
  217.     //      nElementos++;
  218.     //  }
  219.    
  220.     }
Advertisement
Add Comment
Please, Sign In to add comment