Estrutura de Dados

Opa pessoal.

Estou precisando do código ou de uma ajuda em lista ordenada por um inteiro, é um projeto da faculdade e os livros são muito confusos. Meu professor quer que seja implementado, só que ele disse que por recursão é mais facíl.

Alguém tem uma dica aí ?

Obrigado.

Como vc está cursando E.D., provavelmente você deverá implementar utilizando algum algorítmo de ordenação (bubble sort, quick sort, etc…). Um bom livro com certeza vai ajudar.

Além do que o Google é uma ótima fonte de ajuda.

Como assim lista ordenada por inteiro ???

Eu tenho códigos de listas ordenadas, qualquer coisa em manda uma mensagem privada com seu e-mail e depois te mando os fontes.

Eu consegui fazer a lista mas me deu um erro na hora da exclusão. Quando eu excluo o último tudo certo, mas ai quando eu excluo o primeiro ele deixa de listar o último que ficou. Alguém saberia me dizer o que foi que deu errado ?

  public void excluir( int crm )
   {
    Medico atual = this.pri;
    Medico ant = atual;
    //Testa se o elemento a ser excluido da lista é o primeiro
    if( prim() && pri.getCrm() == crm )
        ant = atual = pri = null;
    while( atual.prox != null )
     {
      if( pri.getCrm() == crm )
        pri = atual = ant = pri.prox;
        else
         {
          ant = atual;
          atual = atual.prox;
          if( atual.prox == null )
           {	
             ant.prox = null;
             break;
            }
          if( atual.getCrm() == crm )
           {
             ant.prox = atual.prox;
             atual = atual.prox;
           } 
         }
     }
   }

Iaê JBoy__!

Uma lista q fiz semestre passado :slight_smile: :

[code]class No {

   private int info;
   private No prox;//próximo nó

   //construtor
   public No(int info){
        this.info = info;
        prox = null;
   }

   //construtor q recebe outro nó
   public No(No prox){
        this.prox = prox;
   }

   public void setProx(No prox){
        this.prox = prox;
   }

   public No getProx(){
        return prox;
   }

   public void setInfo(int info){
        this.info = info;
   }

   public int getInfo(){
        return info;
   }

   //verifica o prox deste nó existe
   public boolean existeProx(){
        if(this.getProx()!=null)
            return true;
        return false;
   }

}[/code]

[code]public class Lista {

   private No init;//primeiro nó da lista

   //construtor, inicializa o init como null
   public Lista(){
        init = null;
   }

   //contrutor, inicializa o init com o valor recebido
   public Lista(int info){
        init = new No(info);
   }

   //calcula o tamanho da lista
   public int tamanho(){
        No aux = init;
        int cont = 1;
        while(aux.existeProx()){
            cont++;
            aux = aux.getProx();
        }
        return cont;
   }

   //insere um nó no final da lista
   public boolean insereNo(int info){

        No aux = new No(init);
        while(aux.existeProx()){
            aux = aux.getProx();
            if(aux.getInfo()==info)
                 return false;
        }
        aux.setProx(new No(info));
        return true;
   }

   //busca e remove o nó do valor informado
   public void removeNo(int info){
        if(init.getInfo()==info){
             init = init.getProx();
             return;
        }
        No aux = init;
        while(aux.existeProx()){
                 if(aux.getProx().getInfo() == info){
                      aux.setProx(aux.getProx().getProx());
                      break;
                 }
             aux = aux.getProx();
        }
   }

   //imprime em console os valores guardados na lista
   public void imprime(){

        No aux = new No(init);

        while(aux.existeProx()){
            System.out.print(aux.getProx().getInfo() + " ");
            aux = aux.getProx();
        }
        System.out.println("");
    }

    //retorna uma String com os valores guardados na lista
    public StringBuffer texto(){
        StringBuffer texto = new StringBuffer();

        No aux = new No(init);

        while(aux.existeProx()){
            texto.append(aux.getProx().getInfo() + " ");
            aux = aux.getProx();
        }
        return texto;
    }

    public static void main(String args[]){
         Lista lista = new Lista(10);
    }

}
[/code]

É uma lista de números inteiros, mas fazendo algumas modificações, pode armazendar qualquer coisa.

Espero ter ajudado! :puppydogeyes:

Ai vai um exemplo bem safado de ordenacao com listas ligadas usando merge sort, se tiver algum erro, me desculpe, isso eu tirei da cabeca agora:

public class LinkedList {
	
	static class Node {
		Node next;
		Comparable obj;
	}
	Node head;
	
	public void print() {
		System.out.print("[");
		Node n = head;
		while(n != null) {
			System.out.print(n.obj);
			n = n.next;
			if(n != null)
				System.out.print(", ");
		}	
		System.out.println("]");
	}
	
	public void sort() {
		head = sort(head);	
	}

		
	static Node sort(Node a) {
		Node b = split(a);
		if(b == null)
			return a;
		if(a.next != null) {
			a = sort(a);
			b = sort(b);
		}			
		return merge(a,b);	
	}

	static Node merge(Node a, Node b) {
		Node c = null;
		Node tail = null;
		do {
			Node n;
			if(a == null)
				n = b;
			else if(b == null)
				n = a;
			else if(a.obj.compareTo(b.obj) <= 0)
				n = a;
			else
				n = b;

			if(n == a)
				a = a.next;
			else
				b = b.next;
	
			if(c == null)
				c = tail = n;
			else {
				tail.next = n;
				tail = n;
			}
				
		} while(a != null || b != null);
		tail.next = null;
		return c;
	}
	
	static Node split(Node a) {
		Node b = a.next;
		if(b != null) {
			Node c = b.next;
			b.next = a.next = null;
			boolean toB = false;
			while(c != null) {
				Node tmp = c.next;
				if(toB) {
					c.next = b.next;
					b.next = c;
				} else {
					c.next = a.next;
					a.next = c;
				}
				toB = !toB;
				c = tmp;	
			}			
		}
		return b;		
	}
	
	
	void add(Comparable c) {
		Node n = new Node();
		n.obj = c;
		n.next = head;
		head = n;		
	}
	
	
	
	public static void main(String[] args) {
		LinkedList ll = new LinkedList();
		ll.add("oi");
		ll.add("boo");
		ll.add("foo");
		ll.add("aaa");
		ll.add("zoo");
		ll.add("bar");
		ll.print();
		ll.sort();
		ll.print();		
	}
}