Advertisement
Guest User

Lista.java

a guest
Apr 26th, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.41 KB | None | 0 0
  1. package atividade_ed2;
  2.  
  3. //import javax.swing.*;
  4.  
  5. public class Lista {
  6.     //Lista encadeada (não completa- para exercício)
  7.  
  8.     private No inicio;
  9.  
  10.     public Lista() {
  11.         inicio = null;
  12.     }
  13.  
  14.     //Lista FTC - questao 3 - a
  15.     public static void concatenar(Lista l1, Lista l2){
  16.         No tmp = l1.inicio;
  17.         //No ant = temp;
  18.         while(tmp.getProximo()!=null){
  19.             //ant = temp;
  20.             tmp = tmp.getProximo();
  21.         } //acaba o laco quando chegar no penultimo no
  22.         tmp.setProximo(l2.inicio);
  23.     }
  24.  
  25.     //transferir a lista maior - funcionando!
  26.     public static void intercalar3(Lista l1, Lista l2){
  27.         if(l1.inicio==null||l2.inicio==null){
  28.             System.out.println("Não há como intercalar listas vazias!");
  29.             return;
  30.         }    
  31.         else {
  32.             Lista l3 = new Lista();
  33.             //No ant = l1.inicio;
  34.             //verificar qual a lista com maior numero de noss, essa sera a lista "lider"
  35.             No ant = l1.numPosicoes()>=l2.numPosicoes()?l1.inicio:l2.inicio;
  36.             No prox = ant.getProximo();
  37.             //No no2 = l2.inicio;
  38.             //verificar qual a lista com menor numero de noss, essa sera a lista que perdera os nos
  39.             No no2 = l1.numPosicoes()<l2.numPosicoes()?l1.inicio:l2.inicio;
  40.             //Enquanto houver elementos na lista
  41.             while(no2!=null){
  42.                 //Pega a informação do no da lista menor
  43.                 No novo = new No(no2.getInfo());
  44.                 //O novo no criado com a info da menor lista sempre aponta pro proximo no da maior lista
  45.                 novo.setProximo(prox);
  46.                 //Se for o No inicial, onde o ant.prox == prox, apenas o ant recebe o novo na 2ª posicao    
  47.                 if(ant.getProximo()==prox){
  48.                     ant.setProximo(novo);
  49.                     //Senao, e o novo no já foi incluido
  50.                 } else {
  51.                     //o novo No passa a setar para o proximo do prox(um no a frente do que sera colocado)
  52.                     novo.setProximo(prox.getProximo());    
  53.                     //Seta o proximo de prox para o novo valor a ser inserido
  54.                     prox.setProximo(novo);
  55.                     //Pula o valor inserido e pega o proximo no da maior lista
  56.                     prox = prox.getProximo().getProximo();
  57.                 }
  58.                 //controla o loop
  59.                 no2 = no2.getProximo();
  60.             }
  61.         }    
  62.     }
  63.  
  64.     //segunda tentativa errada
  65.     public static Lista intercalar2(Lista l1, Lista l2){
  66.         Lista l3 = new Lista();
  67.         No tmp_l1 = l1.inicio, tmp_l2 = l2.inicio, tmp_l3=l3.inicio;
  68.  
  69.         if(l1.numPosicoes()>=l2.numPosicoes())
  70.             while(tmp_l1!=null){
  71.                 //
  72.                 //l3.incluir(tmp_l1.getInfo());
  73.                 if(tmp_l3==null){//lista vazia
  74.                     tmp_l3 = tmp_l1;//começa com o primeiro No de l1
  75.                 }
  76.                 if(tmp_l2!=null){
  77.                     tmp_l3.setProximo(tmp_l2);    
  78.                     tmp_l2 = tmp_l2.getProximo();
  79.                 }
  80.                 tmp_l1 = tmp_l1.getProximo();    
  81.                 tmp_l3.setProximo(tmp_l1);
  82.             }
  83.         else
  84.             while(tmp_l2!=null){
  85.                 if(tmp_l3==null){
  86.                     tmp_l3 = tmp_l2;
  87.                 }
  88.                 if(tmp_l1!=null){
  89.                     tmp_l3.setProximo(tmp_l1);    
  90.                     tmp_l1 = tmp_l1.getProximo();
  91.                 }
  92.                 tmp_l2 = tmp_l2.getProximo();    
  93.                 tmp_l3.setProximo(tmp_l2);
  94.             }
  95.         l3.inicio = tmp_l3;
  96.         return l3;    
  97.     }
  98.  
  99.     //Lista FTC - questao 3 - b - funcionando, porém mal interpretada
  100.     public static void intercalar(Lista l1, Lista l2){
  101.         //poe uma lista no meio da outra
  102.         if(l1.isEmpty()||l2.isEmpty()){
  103.             System.out.println("Impossivel, uma das listas esta vazia!");
  104.             return;
  105.         }
  106.         int meio=1,pos=1;
  107.         No tmp = l1.inicio;  
  108.         No ant = tmp;
  109.         if(l1.numPosicoes()>1)  //Se a l1 tiver mais de uma posicao
  110.             meio=l1.numPosicoes()/2; //calcula o meio com a funcao numPosicoes()
  111.  
  112.         while(pos<=meio){//até achar o meio
  113.             ant = tmp;  //anterior ao tmp
  114.             tmp = tmp.getProximo(); //percorre a lista
  115.             pos++;  
  116.         }
  117.         //quando achar o meio da lista, seta pro anterior ao tmp o inicio da l2
  118.         ant.setProximo(l2.inicio);
  119.         //Agora percorre do anterior ao final da l2
  120.         No tmp2 = ant;
  121.         while(tmp2.getProximo()!=null){
  122.             tmp2 = tmp2.getProximo();
  123.         }//percorre até o penultimo No
  124.  
  125.         tmp2.setProximo(tmp);//seta o resto da l1(tmp) para a concatenação de l1/2 e l2
  126.         l2.inicio = null;   //acaba com l2
  127.     }
  128.     //exercicio
  129.     public void insert(int e){
  130.         No novo = new No(e);
  131.         if(isEmpty()){
  132.             inicio = novo;
  133.         }  
  134.         else{
  135.             No tmp = inicio;
  136.             while(tmp!=null){
  137.                 if(novo.getInfo()==tmp.getInfo()){
  138.                     System.out.println(novo.getInfo()+" já existe!");
  139.                     return;
  140.                 }
  141.                 else
  142.                     tmp = tmp.getProximo();
  143.             }
  144.             novo.setProximo(inicio);
  145.             inicio = novo;
  146.         }
  147.     }
  148.  
  149.     public void incluir(int e) {
  150.         No novo = new No(e, null);
  151.         if (isEmpty()) {
  152.             inicio = novo;
  153.         } else {
  154.             novo.setProximo(inicio); //Se já houver elementos, seta o prox No com o inicio
  155.             inicio = novo;           //E substitui o inicio pelo novo No
  156.         }
  157.     }
  158.  
  159.     boolean isEmpty() {
  160.         return (inicio == null);
  161.     }
  162.  
  163.     public void removerPos(int posicao) {//Recebe uma posição especifica da lista e a remove
  164.         //Receber a posição, verificar se a lista contém o numeros de posições suificientes
  165.         if((this.numPosicoes()<posicao)||posicao<=0){//Se houver menos No's na lista do que a posição/quantidade requerida
  166.             System.out.println("Numero inválido! \nNumero de posições da lista: "+this.numPosicoes()+"\nPosição procurada: "+posicao);
  167.             return;
  168.         }
  169.         else{//Se houver posições suficientes
  170.             No temp, ant;
  171.             ant = temp = inicio;
  172.             if((posicao == 1)&&(inicio.getProximo()!=null))//se a primeira elemento e existir mais de um No
  173.                 inicio = temp.getProximo();
  174.             else{
  175.                 int pos = 1;
  176.                 while(pos!=posicao){  //Varre os No's até achar a posição
  177.                     ant = temp;
  178.                     temp = temp.getProximo();
  179.                     pos++;
  180.                 }
  181.                 int val = temp.getInfo(); //Guarda o valor encontrado na posição
  182.                 ant.setProximo(temp.getProximo()); //remove o nó, setando o nó aterior para apontar para dois nós a frente
  183.             }
  184.         }  
  185.     }
  186.  
  187.     public void removerElem(int e){
  188.         No temp = inicio;
  189.         No ant = inicio;
  190.         int valor = inicio.getInfo();
  191.         while ((temp.getProximo() != null) && (valor != e)) {//enquanto houver elemento na lista e o valor for diferente do procurado
  192.             ant = temp;                 //No anterior ao temp
  193.             temp = temp.getProximo();   //Controle do No
  194.             valor = temp.getInfo();     //Informação
  195.         }
  196.  
  197.         if ((temp.getInfo()== e) && (temp == inicio))//Se o valor procurado está na posição inicial da lista
  198.         {
  199.             if (inicio.getProximo() != null) {//Se houver mais elementos na lista
  200.                 inicio = inicio.getProximo();  //então o valor do inicio recebe o próximo nó
  201.             }
  202.             else
  203.             {
  204.                 inicio = null;                  //Se houver apenas um elemento, então o inicio é nulo
  205.             }
  206.         }
  207.         else if (temp.getInfo()== e) {          //Se o valor procurado não estiver na posição inicial e o valor procurado estiver na posição de temp.getInfo()
  208.             ant.setProximo(temp.getProximo());  //anterior seta o nó temp para um nó à frente
  209.         } else {                                //Se o valor não for encontrado, então ele não está na lista
  210.             //JOptionPane.showMessageDialog(null, "O elemento nao esta na Lista");
  211.             System.out.println("O elemento não está na lista");
  212.         }
  213.     }
  214.  
  215.     public void print() {
  216.         No temp = inicio;
  217.         String saida = "";
  218.         while (temp != null) {
  219.             saida += temp.getInfo() + " ";
  220.             temp = temp.getProximo();
  221.         }
  222.         System.out.println("Lista: "+saida);
  223.         //JOptionPane.showMessageDialog(null, saida);
  224.     }
  225.  
  226.     public boolean pesquisaElem(int e) {
  227.         No temp = inicio;
  228.         if (inicio == null) {
  229.             return false;
  230.         } else {
  231.             while (temp != null) {
  232.                 if (e == temp.getInfo()) {
  233.                     return true;
  234.                 } else {
  235.                     temp = temp.getProximo();
  236.                 }
  237.             }
  238.         }
  239.         return false;
  240.     }
  241.  
  242.     public int numPosicoes() {      //Retorna o numero de No's da lista
  243.         if (isEmpty()) {            //Se a lista não tiver elementos, retorna 0
  244.             return 0;
  245.         }
  246.         else {                      //Se houver elemetos, verifica quantas No's há na lista
  247.             No temp = inicio;
  248.             int num = 0;
  249.             while (temp != null) {  //Enquanto houver elementos na lista
  250.                 num++;              //Contabiliza o numero de No's
  251.                 temp = temp.getProximo();
  252.             }
  253.             return num;
  254.         }
  255.     }
  256.  
  257.     public int pesquisaPos(int e) { //Pesquisa a posição de um elemento pelo seu valor e retorna sua posição
  258.         No temp = inicio;
  259.         int pos = 1;
  260.         //int aux = 1;  Variavel inutil??
  261.         if (inicio == null) {               //Se não houver elementos na lista, então retorna 0
  262.             return 0;
  263.         } else {
  264.             while (temp != null) {          //Enquanto houver elementos na lista
  265.                 if (e == temp.getInfo()) {  //Se o elemento for encontrado neste nó, então retorna sua posição
  266.                     return pos;
  267.                 } else {                    //Se o elemento ainda não foi encontrado, incrementa a posição
  268.                     //aux++;  Variavel inutil??
  269.                     pos++;
  270.                     temp = temp.getProximo();
  271.                 }
  272.             }
  273.         }
  274.         return 0;
  275.     }
  276.     //questao 2 - prova
  277.     public int remover(int k){//Remove todas as ocorrencias de k de dentro da lista
  278.         No ant = inicio;
  279.         No tmp = inicio;
  280.         int val=0;
  281.         while(tmp!=null){  
  282.             if(inicio.getInfo()==k){    //Se o elemento estiver no iniciod a lista
  283.                 val = inicio.getInfo(); //pega o valor
  284.                 inicio = inicio.getProximo();   //seta o inicio para o prox elemento
  285.                 tmp = inicio;                   //tmp é inicio
  286.                 ant = tmp;                      //e ant é tmp
  287.             }
  288.             else{                           //Se o elemento nao estiver no inicio
  289.                 if(tmp.getInfo()==k){       //se o elemento for encontrado
  290.                     val = tmp.getInfo();    //pega o valor
  291.                     ant.setProximo(tmp.getProximo());   //seta o anterior para um No a frente do que contem o elemento k
  292.                     tmp = tmp.getProximo();             //retira o no que contem o elemento k
  293.                 }
  294.                 else{                   //se o elemento nao for encontrado, percorre a lista
  295.                     ant = tmp;
  296.                     tmp = tmp.getProximo();
  297.                 }
  298.             }
  299.         }
  300.         return val; //retorna o valor encontrado ou 0 se nao achou nada
  301.     }
  302.    
  303.     //questao 3 - prova
  304.     public void inserirK(int e, int k){
  305.         int pos = 1;
  306.         No tmp = inicio;
  307.         No ant = inicio;
  308.         while((tmp!=null)&&(pos!=k)){
  309.             ant = tmp;
  310.             tmp = tmp.getProximo();
  311.             pos++;
  312.         }
  313.  
  314.         if((pos==k)&&(this.numPosicoes()>=k)){
  315.             No novo = new No(e);
  316.             ant.setProximo(novo);
  317.             novo.setProximo(tmp);
  318.         }    
  319.         else
  320.             System.out.println("Posicao nao encontrada!");
  321.     }    
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement