No, this has nothing to do with '51s, but I want the opinions of some of you tenured chaps: In a circular queue, what do you consider the head and what do you consider the tail? I've always know the tail as the point (index, whatever) that points to the next available free space in the buffer. That is, data is placed IN at the tail, and removed from the head position. I learned this definition years ago when digging into the IBM PC's keyboard buffer and a book on the topic listed the pointers as I describe above. That's how I've thought of them ever since and is how several google results describes them as well. You?
"I've always know the tail as the point (index, whatever) that points to the next available free space in the buffer. That is, data is placed IN at the tail..." Rather than use ambiguous names like "head" and "tail," why not use names that explicitly describe what they do - like "read pointer" and "write pointer" or "input pointer" and "output pointer." Names should be chosen to add clarity!