2010-08-21 8 views
1

J'apprends des files d'attente à partir d'un livre. L'auteur explique l'opération d'insertion d'un élément dans la file d'attente à l'aide du code suivant.C Problème de programmation de la file d'attente

#define MAX 100 
char *p[MAX]; 
int spos = 0; // spos: holds the index of the **next free** storage location 

int rpos = 0;// rpos: holds the index of the next item to retrieve 

void qstore(char *q) 
{ 
    if(spos==MAX) { 
    printf("List Full\n"); 
    return; 
    } 
    p[spos] = q; 
    spos++; 
} 

Ainsi, selon le code ci-dessus, une file d'attente est pleine, si FS = 100 i.e. le dernier élément du tableau. Maintenant, puisque spos détient l'index du prochain emplacement de stockage libre, puis lorsque spos = 100, la dernière position dans le tableau est vide. Alors pourquoi est-il expliqué comme Liste complète? Ce code ne devrait-il pas être modifié de sorte qu'il permette de remplir la dernière position du tableau ou est-ce que quelque chose me manque?

Merci.

+0

Ha! Je pense que je comprends maintenant. Étant donné que la taille du tableau est 100, alors le dernier élément du tableau est réellement p [99], donc spos = 100 signifie que la file d'attente est pleine. Un concept si simple et si régulier que je me suis trompé. * sent sa tête, et s'en va en marmonnant * – Naruto

+0

Merci les gars. Je ne sais pas comment j'ai raté ce point. Pauvre moi (: – Naruto

+0

arrêter de lire "Naruto" et lire plus de code: P – rano

Répondre

2

L'indexation de tableau commence à 0, donc pour vous MAX == 100 vous aurez des emplacements de tableau valides entre 0 et 99. Donc quand spos == 99 signifie que la dernière position dans le tableau est disponible et vous êtes autorisé à mettre quelque chose Dans la file d'attente, spos est incrémenté et "pointe" vers un emplacement invalide, ce qui signifie que la liste est pleine, ce qui est vrai puisque vous avez déjà rempli les positions 0 à 99 dans le tableau.

5

p[100] alloue 100 machines à sous, à index 0 à 99. Il n'y a pas de position 100.

2

Je suppose que p[100] est un accès invalide, vous pouvez le faire à votre tableau. Le dernier emplacement valide est p[99]

plus étant donné que vous êtes la mise en œuvre une file d'attente en utilisant un tableau, ne confondez pas un type de données abstrait avec l'un de ses implémentations possibles

1

L'indice du dernier élément de le tableau si 99, pas 100.

Donc, quand spos = 100, la file d'attente est vraiment pleine.