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 }
上一篇: 关于VC++6.0与WIN10系统不兼容的解决办法
下一篇: IO流大总结