C/Data Structure Algorithm/Queue — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
|
(нет различий)
|
Версия 17:20, 25 мая 2010
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. */
- 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];
}
</source>
Queue in C
<source lang="cpp">
- include <string.h>
- include <stdlib.h>
- include <stdio.h>
- include <ctype.h>
- 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>