Dúvida em exercício de Fila

10 respostas
D

Pessoal estou com uma dúvida em um exercício de faculdade, é o seguinte:

Escreva um método (display) para a classe Queue que exiba o conteúdo da fila. Note que isto não significa simplesmente exibir o conteúdo do vetor subjacente. Você deverá exibir o conteúdo da fila do primeiro item inserido até o último, sem indicar ao observador quando a sequência estiver quebrada circundando para o final do vetor. Tenha cuidado de que um item e sem itens sejam exibidos corretamente, não importando onde front e rear estejam.

Sendo esse o exercício, abaixo o código a ser implementado:

public class Queue {
	
	private int maxSize;
	   private long[] queArray;
	   private int front;
	   private int rear;
	   private int nItems;
	//--------------------------------------------------------------
	   public Queue(int s)          // constructor
	      {
	      maxSize = s;
	      queArray = new long[maxSize];
	      front = 0;
	      rear = -1;
	      nItems = 0;
	      }
	//--------------------------------------------------------------
	   public void insert(long j)   // put item at rear of queue
	      {
	      if(rear == maxSize-1)         // deal with wraparound
	         rear = -1;
	      queArray[++rear] = j;         // increment rear and insert
	      nItems++;                     // one more item
	      }
	//--------------------------------------------------------------
	   public long remove()         // take item from front of queue
	      {
	      long temp = queArray[front++]; // get value and incr front
	      if(front == maxSize)           // deal with wraparound
	         front = 0;
	      nItems--;                      // one less item
	      return temp;
	      }
	//--------------------------------------------------------------
	   public long peekFront()      // peek at front of queue
	      {
	      return queArray[front];
	      }
	//--------------------------------------------------------------
	   public boolean isEmpty()    // true if queue is empty
	      {
	      return (nItems==0);
	      }
	//--------------------------------------------------------------
	   public boolean isFull()     // true if queue is full
	      {
	      return (nItems==maxSize);
	      }
	//--------------------------------------------------------------
	   public int size()           // number of items in queue
	      {
	      return nItems;
	      }
	//--------------------------------------------------------------   	   
		
	}

Não estou conseguindo fazer esse método Display para exibir o conteúdo da fila. Agradeço desde já!

10 Respostas

Rodrigo_Sasaki

não li seu código, mas não tem como você iterar do front até o rear e sair imprimindo? algo como:

for(int i=front ; i<rear ; i++){ System.out.print(queArray[i]); }

F

É fila circular, então, né?

Tem que checar uma coisa:
Se “rear” é menor que “front” (ou seja, a fila já deu a volta).
Caso contrário, procedimento normal de percorrer a fila do inicio ao fim.

Não vou te dizer como é porque senão tu não pensará muito. O importante é entender, depois tu conseguirá implementar em que linguagem for.

D

Obrigado pessoal, realmente foram muito rápidos. Consegui entender o raciocínio, vou implementar agora. Qualquer dúvida volta a postar! Obrigado!

D

Uma outra dúvida pessoal:

De acordo com a informações anteriores relativa à implementação de uma fila não utilizando o campo nItens, reescreva a classe Queue não utilizando este campo, analise o impacto desta modificação nos métodos da classe e altere o código onde for necessário e lembre-se que os métodos que sofrerão maior impacto são: isEmpty(), isFull() e size().

Esse eu não sei nem por onde começar… Agradeço novamente!

douglaskd

remove nItens do seu programa

e nos ultimos métodos afetados, no lugar de nItens troque por queArray.length

D

Certo, vou tentar fazer essa implementação. Obrigado!

Sobre o problemado método Display, alguém poderia me dar um exemplo de como ficaria o código? Queria analisar um código para poder entender… Obrigado!

D

digaoneves:
não li seu código, mas não tem como você iterar do front até o rear e sair imprimindo? algo como:

for(int i=front ; i<rear ; i++){ System.out.print(queArray[i]); }

Fiz essa implementação, mas não estou conseguindo fazer o teste para ver se funciona, como ficaria a main com esse código?

Rodrigo_Sasaki

não precisa ter main.

adicione isso no seu método display()

public void display(){ for(int i=front ; i<rear ; i++){ System.out.println(queArray[i]); } }

Ou pesquise por Enhanced For, se for permitido usar (não sei o que seu professor estipulou), é uma mão na roda.

D

digaoneves:
não precisa ter main.

adicione isso no seu método display()

public void display(){ for(int i=front ; i<rear ; i++){ System.out.println(queArray[i]); } }

Ou pesquise por Enhanced For, se for permitido usar (não sei o que seu professor estipulou), é uma mão na roda.

Foi exatamente o que eu fiz. Estava com dúvida se precisava fazer na main. Obrigado, pela ajuda! Consegui entender o código um pouco melhor.

F

Assim você não exibirá na ordem lógica correta (front até rear) e sim na ordem física (primeira posição à última).

Criado 8 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 10
Participantes 4