C/Data Structure Algorithm/Queue

Материал из C\C++ эксперт
Перейти к: навигация, поиск

A circular queue example using a keyboard buffer

<source lang="cpp"> /* 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. */

  1. include <stdio.h>
  2. include <conio.h>
  3. include <stdlib.h>
  4. 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];

}

      </source>


Queue in C

<source lang="cpp">

  1. include <string.h>
  2. include <stdlib.h>
  3. include <stdio.h>
  4. include <ctype.h>
  5. define MAX 100

char *p[MAX], *pop(void); int spos = 0; int rpos = 0; void add(void), push(char *q), print(void), remove(void);

void add(void) {

 char s[256], *p;
 do {
   printf("spos %d: ", spos+1);
   gets(s);
   if(*s==0) {
      break;
   }
   p = (char *) malloc(strlen(s)+1);
   if(!p) {
     printf("Out of memory.\n");
     return;
   }
   strcpy(p, s);
   if(*s) {
      push(p);
   }
 } while(*s);

} void print(void) {

 int t;
 for(t=rpos; t < spos; ++t)
   printf("%d. %s\n", t+1, p[t]);

} void remove(void) {

 char *p;
 if((p=pop())==NULL) {
    return;
 }
 printf("%s\n", p);

} void push(char *q) {

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

} char *pop(void) {

 if(rpos==spos) {
   printf("No more.\n");
   return NULL;
 }
 rpos++;
 return p[rpos-1];

} int main(void) {

 char s[80];
 register int t;
 for(t=0; t < MAX; ++t) {
    p[t] = NULL;
 }
 while(1) {
   printf("Add(A), Print(P), Remove(R), Quit(Q): ");
   gets(s);
   *s = toupper(*s);
   switch(*s) {
     case "A":
       add();
       break;
     case "P":
       print();
       break;
     case "R":
       remove();
       break;
     case "Q":
       exit(0);
   }
 }
 return 0;

}

      </source>