Estrutura de Dados

5 respostas
J

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.

5 Respostas

danieldestro

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.

N

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.

J

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;
           } 
         }
     }
   }
Betinhum

Iaê JBoy__!

Uma lista q fiz semestre passado :) :

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;
       }

}
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);
        }
}

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

Espero ter ajudado! :puppydogeyes:

louds

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();		
	}
}
Criado 27 de outubro de 2003
Ultima resposta 31 de out. de 2003
Respostas 5
Participantes 5