欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FIFO队列 ADT接口 数组实现

程序员文章站 2022-04-09 20:24:52
FIFO.h (接口) Item.h (自定义类型) FIFO.c (接口实现) main.c (主程序) ......

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("输入字符串\n");
12     while((N=getchar())!=EOF)
13     {
14         if(N=='*')
15             {
16                 putchar(QUEUEget());
17                 putchar('\n');
18             }
19         else
20             QUEUEput(N);
21     }
22     
23     return 0;
24 }