2017-01-13 3 views
2

J'essaye d'implémenter la file d'attente du livre clrs, mais cela ne fonctionne pas comme prévu. Quel est le problème avec mon code?Im essayant d'implémenter la file d'attente du livre clrs, mais son ne fonctionne pas comme prévu? Quel est le problème avec mon code

Cela peut-il être un problème avec la taille de la file d'attente ou le fonctionnement de la mise en file d'attente?

Cependant, il est très clair que l'opération de mise en file d'attente dans la file d'attente ne fonctionne pas comme prévu. Voici mon code:

class Queue: 

    def __init__(self,size): 
     self.queue=[None]*(size+1) 
     self.tail=1 
     self.head=1 
     self.size=size 

    def enqueue(self,item): 
     #error checking 
     if(self.isFull()): 
      print("queue overflows,queue full") 
      return 
     #-------------------- 
     self.queue[self.tail]=item 
     if(self.tail==self.size): 
      self.tail=1 
     else: 
      self.tail=self.tail+1 

    def dequeue(self): 

     #error checking 
     if(self.isEmpty()): 
      print("queue underflows,queue empty") 
      return 
     #-------------------- 
     x=self.queue[self.head] 
     if(self.head==self.size): 
      self.head=1 
     else: 
      self.head=self.head+1 
     return x 

    def isFull(self): 
     return (self.tail + 1)= self.head 

    def isEmpty(self): 
     return self.head==self.tail 

    def first_person(self): 
     if(self.isEmpty()): 
      return ("queue empty") 
     return self.queue[self.head] 

Répondre

1

pouvez-vous utiliser "==" pour la comparaison, "=" dans python est utilisé pour l'affectation. Je suppose que isFull retourne un booléen True ou False, en fonction de la taille de la file d'attente, et je pense aussi qu'il est implémenté en utilisant la file circulaire d'où cette vérification de tail + 1 == head.

def isFull(self): 
    return (self.tail + 1)== self.head