FIFO.h (接口)
1 #include "Item.h"
2 #include <stdlib.h>
3
4 typedef struct STACKnode *link;
5 struct STACKnode
6 {
7 Item item;
8 link next;
9 };
10
11 void QUEUEinit(int);
12 int QUEUEempty(void);
13 void QUEUEput(Item);
14 Item QUEUEget(void);
15 void QUEUEerror(void);
Item.h (自定义类型)
1 typedef char Item;
FIFO.c (接口实现)
1 static Item *q;
2 static int N, head, tail;
3
4 void QUEUEinit(int maxN)
5 {
6 q=malloc((maxN+1)*sizeof(Item));
7 N=maxN+1;
8 head=N;
9 tail=0;
10 }
11 int QUEUEempty(void)
12 {
13 return head%N==tail;
14 }
15 void QUEUEput(Item item)
16 {
17 if(tail==head-1)
18 QUEUEerror();
19 q[tail++]=item;
20 tail=tail%N;
21 }
22 Item QUEUEget(void)
23 {
24 if(QUEUEempty())
25 QUEUEerror();
26 head=head%N;
27 return q[head++];
28 }
29 void QUEUEerror(void)
30 {
31 printf("队列为空或已满");
32 exit(1);
33 }
main.c (主程序)
1 #include <stdio.h>
2 #include "FIFO.h"
3
4 int main(void)
5 {
6 int N;
7 printf("输入字符串大小:");
8 if(scanf("%d", &N))
9 QUEUEinit(N);
10 getchar();
11 printf("输入字符串
");
12 while((N=getchar())!=EOF)
13 {
14 if(N=='*')
15 {
16 putchar(QUEUEget());
17 putchar('
');
18 }
19 else
20 QUEUEput(N);
21 }
22
23 return 0;
24 }