2017-10-17 10 views
0

maintenant, dans ma file d'attente de code de commandeComment changer cet ordre de file d'attente?

noeud normal -> noeud normal -> nœud élément -> null

avant remarquer noeud normal, mais je veux signaler noeud article!

donc, je veux changer le code pour

nœud élément -> noeud normal -> noeud normal -> null

et mon code est ,,

void LQ_CreateQueue(LinkedQueue **Queue) 
{ 
    (*Queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue)); 
    (*Queue)->Front = NULL; 
    (*Queue)->Rear = NULL; 
    (*Queue)->count = 0; 
} 

Node *LQ_CreateNode(int NewData) 
{ 
    Node *NewNode = (Node*)malloc(sizeof(Node)); 

    if (NewData == 7) 
     NewNode->Priority = ItemBlock; 
    else 
     NewNode->Priority = NormalBlock; 

    NewNode->rand_value = NewData; 
    NewNode->NextNode = NULL; 

    return NewNode; 
} 

void LQ_DestroyNode(Node *_Node) 
{ 
    free(_Node); 
} 

void LQ_Enqueue(LinkedQueue *Queue, Node *NewNode) 
{ 
    if (Queue->Front == NULL) 
    { 
     Queue->Front = NewNode; 
     Queue->Rear = NewNode; 
     Queue->count++; 
    } 
    else 
    { 
     Queue->Rear->NextNode = NewNode; 
     Queue->Rear = NewNode; 
     Queue->count++; 
    } 
} 

Node *LQ_Dequeue(LinkedQueue *Queue) 
{ 
    Node *Front = Queue->Front; 

    if (Queue->Front->NextNode == NULL) 
    { 
     Queue->Front = NULL; 
     Queue->Rear = NULL; 
    } 
    else 
    { 
     Queue->Front = Queue->Front->NextNode; 
    } 

    Queue->count--; 

    return Front; 
} 

int LQ_IsEmpty(LinkedQueue *Queue) 
{ 
    return (Queue->Front == NULL); 
} 

aidez-moi.

ce code est se composent de CreateQueue, CreateNode, DeleteNode, insertNode, PrintNode, CheckEmptyQueue function.In ordre ..

comment changer ce code.?

+1

Techniquement, ce n'est plus une file d'attente si vous voulez un ordre spécial du contenu, alors c'est une liste ordonnée. –

+0

ooops ..! C'est vrai. –

Répondre

0

En fait, après avoir lu un peu plus sur votre code, ce que vous semblez vouloir est une sorte de file d'attente, appelée file d'attente prioritaire. Le "secret" pour les garder dans l'ordre, c'est lors de l'insertion de nouveaux nœuds que vous parcourez la liste du début à la fin pour trouver l'endroit où insérer le nœud.

Dans votre cas, puisque vous avez seulement deux priorités, il est encore plus simple:

  • Si vous insérez un « nœud normal » puis trouver le dernier « noeud de l'élément » et insérez le « noeud normal » après la dernier "item node" (rendre le nouveau "normal node" NextNode pointeur égal au dernier "item node" NextNode pointeur (avec une affectation simple), puis faire le dernier "item node" NextNode pointeur vers le nouveau "nœud normal" , notez que l'ordre des opérations est important)

  • Si vous insérez un "noeud d'élément", ajoutez simplement i t au début de la file d'attente.

Ou une variante de ce qui précède.

+0

oh merci ,. mais je sais que tu me le dis. mais .. je n'écris pas le code .. s'il vous plaît changer le code .. s'il vous plaît .. –