Mega Code Archive

 
Categories / C / Data Structure Algorithm
 

A circular queue example using a keyboard buffer

/* C: The Complete Reference, 4th Ed. (Paperback) by Herbert Schildt ISBN: 0072121246 Publisher: McGraw-Hill Osborne Media; 4 edition (April 26, 2000) */ /* A circular queue example using a keyboard buffer. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAX 80 char buf[MAX+1]; int spos = 0; int rpos = 0; void qstore(char q); char qretrieve(void); int main(void) {   register char ch;   int t;   buf[80] = '\0';   /* Input characters until a carriage return is typed. */   for(ch=' ',t=0; t<32000 && ch!='\r'; ++t) {     if(_kbhit()) {       ch = _getch();       qstore(ch);     }     printf("%d ", t);     if(ch == '\r') {       /* Display and empty the key buffer. */       printf("\n");       while((ch=qretrieve()) != '\0') printf("%c", ch);       printf("\n");     }   }   return 0; } /* Store characters in the queue. */ void qstore(char q) {   if(spos+1==rpos || (spos+1==MAX && !rpos)) {     printf("List Full\n");     return;   }   buf[spos] = q;   spos++;   if(spos==MAX) spos = 0; /* loop back */ } /* Retrieve a character. */ char qretrieve(void) {   if(rpos==MAX) rpos = 0; /* loop back */   if(rpos==spos) return '\0';   rpos++;   return buf[rpos-1]; }