Fila de Prioridades

3 respostas
Odyo

Galera,

Recebi um exercicio pra fazer a respeito de fila de prioridades …
e pesquisando em livros e na internet consegui fazer a tal fila usando vetores

agora estou tentando refazer a fila usando referências.
estou com dúvidas em alguns pontos do meu código …

private class Celula
    {
        int valor;
        Celula proxima;
    
        public Celula ( int x )
        {
            this.valor = x;
            
        }
    } // class celula

todas as vezes que criar um Objeto da classe Celula :

Celula exemplo = new Celula ( x )

o valor do elemento contido na célula sera X e o valor proxima será automaticamente definido como null ?

a outra duvida é a seguinte :

public void enfileirar(int x)
    {
        Celula C = new Celula ( x );
        
        if ( inicio == null )
        {
            inicio = fim = C;
        }
        
        else
        {
            fim.proxima = C;
            fim=fim.proxima;
        }
    } // Enfileirar

Este é o metodo enfileirar da tal Fila … dentro do IF tanto início como fim recebem que valor ? o conteudo da celula C ?
e dentro do ELSE :

fim.proxima = C
a mesma situação …

3 Respostas

ViniGodoy

Em primeiro lugar, você está tentando fazer uma fila de prioridades ou uma fila encadeada? Ou ambos, uma fila de prioridades encadeada?

Pelo seu construtor, sim. Atributos são automaticamente inicializados com um valor padrão. No caso, 0 para valor e null para proxima. Depois, durante o construtor, você redefine o valor de valor.

Se você quiser deixar isso explicito, pode também atribuir os valores durante a definição dos atributos:

int valor = 0;
Celula proxima = null;

Não entendi sua última dúvida. No caso, o seu código está atribuindo C a inicio, a fim e a fim.proxima.

Odyo

por hora é apenas uma fila usando referência … preciso entender isso primeiro antes de tentar fazer as prioridades

hummm a primeira parte eu entendi bem, com o que vc disse a respeito dos atributos

a segunda parte eu queria saber o que é atribuido nesta linha …

inicio = fim = C;

o que está sendo passado para fim ? e posteriormente para início ?
qual atributo de C ? seria a célula inteira ?
:oops: :oops: :oops:

heheheh
é a célula inteira … ! agora tudo faz sentido.

vou rever o código e continuar a implementação por prioridades !
desculpa a mancada ! :roll:

ViniGodoy

Sem crise, você está no forum de java básico e é pra isso mesmo que ele serve!

Assim como o resultado de um == é um boolean, o resultado de uma atribuição é sempre o próprio valor atribuído.

Então a linha:

inicio = fim = C;

Pode ser desmembrada em:

fim = C; (Resultando em C)
inicio = C;

No caso de múltiplas atribuições o java sempre avaliará da última para a primeira.

No entanto, não é considerada uma boa prática de programação usar um código assim… prefira sempre uma atribuição por linha.

Até porque, depois que você entende esse lance da atribuição pode ser tentando a fazer coisas pouco claras como:

while (x &lt y = z++)

(que tal? Atribui um valor a y, que é igual ao valor de z antes da soma e repete até que essa o valor atribuído seja menor que x)
Criado 12 de março de 2007
Ultima resposta 12 de mar. de 2007
Respostas 3
Participantes 2