AGRADECIMENTO...

Pessoal, Gostaria de pedir desculpas aqueles que deixam perguntas/comentários/elogios/críticas e ainda não foram respondidos.

Aproveito a oportunidade para informar a todos que devido a correria do dia a dia não conclui o curso de BSI, por isso meus conhecimentos são limitados rsrsrs...

Ainda não retirei o blog do ar porque tem ajudado a diversos estudantes, principalmente os iniciantes.

As vezes, quando o trabalho me permite, ainda arrisco tentar resolver algumas questões rs... mas para não deixar esse blog parar no tempo, o ESTUDANTE que quiser enviar a resolução de alguma questão (código próprio) para o meu e-mail, terei o prazer de posta-la neste blog e será mantido a autoria.

Desde já agradeço a todos pelas visitas e desejo bons estudos.

Thiago Campos
(srthiago@hotmail.com)

domingo, 17 de março de 2013

Métodos inserir, remover, tamanho e imprimir numa lista duplamente encadeada.

Pessoal, continuando... disponibilizo os meus métodos tamanho, imprimir, remover e inserir numa lista duplamente encadeada.

    public int tamanho(){ //esse metodo vai retornar a qtd de elementos da lista
        Usuario temp = primeiro;        
        int totalElementos = 0;
        //vai percorrer e incrementar a variavel totalElementos
        while(temp != null){
            temp = temp.getProx();
            totalElementos++;
        }       
        return totalElementos;
    } //fim do metodo total


 public void imprimir() { //esse metodo vai imprimir os elementos da lista
        //variavel
        Usuario temp = primeiro; //crio a variavel
        //percorro a lista
        while (temp != null) { //Enqto a temp for != null           
            temp.imprimir(); //imprima
            temp = temp.getProx(); //temp receba o prox da fila
        }//fim do while               
    } //fim do metodo


 public void remove(int matricula) { //este metodo vai remover um elemento numa lista duplamente encadeada
        if (primeiro != null) { //se a lista não estiver vazia
            //se for remover o primeiro
            if (primeiro.getMatricula() == matricula) {
                this.primeiro = this.primeiro.getProx();
            } else {
                Usuario temp = primeiro.getProx();
                temp.setAnt(primeiro);
                //percorre a lista
                while (temp != null && temp.getMatricula() != matricula) {
                    temp = temp.getProx();
                }
                //se temp for diferente de null é pq encontrou mat =
                if (temp != null) {
                    temp.getAnt().setProx(temp.getProx());
                    temp.getProx().setAnt(temp.getAnt());
                } //fim do if
            } //fim do else
        } //fim do if
    } //fim do metodo remova


public void inserir(int pos, Usuario novo){
        Usuario temp = primeiro;
        int posicao = 0;
        int tamanho = tamanho(); // metodo que retorna o tamanho da lista
       
        if(temp == null){
            novo.setAnt(null);
            novo.setProx(null);
            primeiro = novo;
        } else if (pos > -1 && pos <= tamanho) {
            while (temp.getProx() != null && pos != posicao) { //temp.getProx() != null pq temp nao pode ser null
                posicao++; //incrementa a posição
                temp = temp.getProx();
            } //fim do while
            if (pos == 0) { //inserir na primeira posição
                novo.setProx(temp);
                novo.setAnt(null);
                temp.setAnt(novo);
                primeiro = novo;
            } else if (pos < tamanho) { //inseri em qualquer posição
                novo.setProx(temp);
                novo.setAnt(temp.getAnt());
                temp.getAnt().setProx(novo);
                temp.setAnt(novo);
            } else { //inseri na ultima posição
                novo.setAnt(temp);
                novo.setProx(null);
                temp.setProx(novo);
            }
        } else {
            System.out.println("Posição invalida!");
        }
    } //final do metodo inserir

quinta-feira, 7 de março de 2013

Método inserir(int pos, objeto novo) numa lista encadeada

Durante a criação desse método, muitas dúvidas sugiram e mesmo pesquisando na internet, não encontrei nenhuma solução simples que me ajudasse efetivamente, alguns amigos me tiraram dúvidas, e até me sugeriram novas rotas para chegar ao resultado. Deu certo, valeu João e Flávio.
 
Ah! Antes que digam que os meus métodos são simples, lembro a todos que sou estudante e ele é voltado para outros estudantes que buscaram justamente soluções simples na internet e só encontraram complexas. Daqui para frente fica mais dificil postar o código inteiro, disponibilizarei métodos e quando for possível, todos o código.
 
Este método abaixo permite o Usuário inserir um objeto em qualquer posição da lista encadeada. O códio foi escrito em Java e espero que ajude a outros estudantes durante sua caminhada.
 
    public void inserir(int pos, Objeto novo) {
        //obj
        Objeto temp = primeiro; //vai receber a lista
        Objeto anterior = null;
        //var
        int posicao = 0;
        int tamanho = tamanho();
 
        //Verifica se a lista está vazia       
        if (temp == null) {
            primeiro = novo;
        }

        //caso a lista não esteja vazia
        if (pos <= tamanho && pos > -1) { //vai garantir as margens
           
            while (posicao != pos) { //Percorre a lista
                anterior = temp; //guarda o anterior
                temp = temp.getProx(); //vai atribuir o proximo a temp
                posicao++; //incrementa a posição
            }
            //valido apenas para a primeira posição
            if (posicao == 0) { //se for para colocar na primeira posicao
                novo.setProx(temp);
                primeiro = novo;
                System.out.println("\nPOSIÇÃO 0");
            } else {
                    //valido para qualquer outra posição               
                    novo.setProx(temp); //o obj novo aponta para o atual
                    anterior.setProx(novo); //o obj anterior aponta para novo
                   
                    System.out.println("\nPOSIÇÃO " + pos);
            } //fim do elsE
        } else {System.out.println("\nPOSIÇÃO INVÁLIDA!");} //fim do else
    } //fim do metodo inserir