Lista encadeadas

3 respostas
A

Por favor me ajudem não consigo passar de simplesmente pra duplamente encadeada! la vai o codigo:

public class ListaEnc {


    private Nodo desc_ini, desc_fim;
    private int tamanho;
                
    /*
     * Métodos Fundamentais 
     * 
     */
    public void insereInicio(Object o) {
                Nodo x = new Nodo();
                x.setNo(o);
                x.setProx(desc_ini);
                desc_ini = x;
                if(tamanho == 0)
                            desc_fim = desc_ini;
                tamanho++;
    }
    public void insereFinal(Object o) {
                Nodo y = desc_fim;       //y recebe a ref. do ultimo nó, oriundo do desc_fim                      
                Nodo x = new Nodo();   //cria um novo no
                x.setNo(o);       //atribui o objeto "o" a objeto x
                x.setProx(null); //atualiza o "link" para o próximo nó
                                                                            //como é insereFinal, aponta para null
                y.setProx(x);                 //atualiza o "link" do ultimo nó com o x
                desc_fim = x;                //atualiza desc_fim
                tamanho++;                              //atualiza o numero de elementos
    }
    public boolean isEmpty(){
    	if (tamanho==0)
    		return true;
    	else
    		return false;
    }
    public void removeInicio() {
    		if (isEmpty()){
    			System.out.print("Lista Vazia");}
    		else{
    			desc_ini = desc_ini.getProx();
				tamanho--;
    		}
    }	
    public void removeFinal() {
    		if (isEmpty()){
    			System.out.print("Lista Vazia");}
    		else{
    		Nodo x;
    		x = desc_ini;
    		while(x.getProx()!= desc_fim){
    			x = x.getProx();
    		}
    		x.setProx(null);
    		desc_fim =x;
    		tamanho--;
    }		
    }
    public void inserePos(Object o, int pos) {
        if(isEmpty()) {
              println("Lista vazia.");
        } else if(pos == 0) {
              insereInicio(o);
        } else if (pos > tamanho) {
              println("Posição fora dos limites");
        } else {          
              Nodo x = desc_ini;
              for(int i=0; i<pos-1; i++) {
                    x=x.getProx();
              }
              Nodo y = new Nodo();
              y.setNo(o);
              y.setProx(x.getProx());
              x.setProx(y);
              tamanho++;
        }
  }




    
    public void removePos(int pos) {
        if(isEmpty()) {
              println("Lista vazia.");
        } else if(pos == 0) {
              removeInicio();
        } else if (pos > tamanho) {
              println("Posição fora dos limites");
        } else {          
              Nodo x = desc_ini;
              for(int i=0; i<pos-1; i++) {
                    x=x.getProx();
              }                       
              x.setProx(x.getProx().getProx());
              tamanho--;
        }
  }
    		
    
    /*
     * Métodos Auxiliares
     */        
    public void listar() {
                if(desc_ini == null)
                            println("Lista vazia");
                else {
                            Nodo x = desc_ini;
                            print("[");
                            while(x.getProx() != null) {                                  
                                        print(x.getNo()+" ");
                                        x = x.getProx();
                            }
                            print(x.getNo()+" ");
                            print("]\n");                                
                }
    }
    
    public String listar_grafico() {
                String msg="";
                if(desc_ini == null)
                            return "Lista vazia";
                else {                
                            Nodo x = desc_ini;
                            msg = "[";
                            while(x.getProx() != null) {                                  
                                        msg += x.getNo()+" ";
                                        x = x.getProx();
                            }
                            msg += x.getNo();
                            msg += "]\n";
                            return msg;                               
                }                       
    }


    public int size() {
                return tamanho;
    }
    
    private void print(String s) {
                System.out.print(s);
    }


    private void println(String s) {
                System.out.println(s);
    }


    private void print(Object o) {
                System.out.print(o);
    }
    
    private void println(Object o) {
                System.out.println(o);
    }
    
}	

// Segunda parte

	public class TesteListaEncadeada {


	            public static void main(String[] args) {
	                        
	                        ListaEnc l = new ListaEnc();
	                        
	                        l.insereInicio("laranja");              
	                        l.insereInicio("banana");
	                        l.insereFinal("pera");
	                        l.listar();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.insereInicio("limao");
	                        l.insereInicio("mamao");            
	                        l.listar();
	                        l.removeInicio();            
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.listar();
	                        l.removeFinal();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.listar();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.inserePos("berganota",2);
	                        l.listar();
	                        l.removePos(0);
	                        l.listar();
	            }
	}

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus [/color][/size] :joia:

3 Respostas

F

Bom, nunca tentei fazer isso em JAVA, mas vamos tentar resolver o teu problema, ja que ninguem se manifesta…eheheheh

Vamos aos conceitos primeiros(vc ja deve saber): lista simplesmente encadeada é aquela que é capaz de apenas seguinr um sentido (os ponteiros…dah).

Uma duplamente encadeada é capaz dee voce ir por um sentido, ou se necessario, voltar.

Bom, para isso, voce precisa ter um atributo a mais para indicar o endereco do NODO anterior… então é o seguinte:

Eu faria algo assim: se voce quer passar de uma lista para a outra, se faria necessario o uso de duas classes, uma para as simplesmente e outra para as duplamente… pq? è necessar um atributo a mais. Ou voce usa numa mesma classe um atrtibuto que so vai receber o endereco do nodo anterior quando tiver passando de um para o outro.

se faria necessario tb dois poteiros, o p1 e p2, sendo p2 sempre um nodo na frente do p1… pq?? o seguinte:

nodo(p2).endereco = nodo(p1).endereco…

ou seja, o nodo em p2 esta apontando necessita do endereco no NODO anterior, entao ele recebe apartir do p1, que SEMPRE vai estar 1 nodo atras de p2…

acho que conceitualmente é isso, agora o codigo fica mais complicado de escrever, ate faria isso, mas o problema é que ja estou cheio de trabalhos pra fazer…

Mas espero que tenha surgida uma luz no fim do tunel…

um abracao!

A

Valeu amigo vou tentar qualquer coisa se conseguir te passo o codigo em java!
Valeu abraços.

M

eu nunca tentei fazer isso sem ponteiros, mas vamos lá
a idéia de duplamente encadeada é simples
você encadeou de tras pra frente, agora encadeie de frente pra tras
quando eu usava ponteiros, eram 2 ponteiros juntos pra voltar :slight_smile:

variavel.^ponteiro1.^ponteiro2

Criado 16 de junho de 2005
Ultima resposta 23 de jun. de 2005
Respostas 3
Participantes 3