FIFO队列 ADT接口 链表实现
程序员文章站
2022-12-08 12:34:41
FIFO.h (接口) Item.h (自定义类型) FIFO.c (接口实现) main.c (主程序) ......
FIFO.h (接口)
1 #include "Item.h" 2 void QUEUinit(int); 3 int QUEUempty(void); 4 void QUEUput(Item); 5 Item QUEUget(void);
Item.h (自定义类型)
1 typedef char Item;
FIFO.c (接口实现)
1 #include "FIFO.h" 2 #include <stdlib.h> 3 4 typedef struct STACKnode *link; 5 struct STACKnode 6 { 7 Item item; 8 link next; 9 }; 10 11 static link head,tail; 12 static int N=1,N1; 13 14 static int STACKerror(int i) 15 { 16 if(i) 17 return N<N1?1:0; 18 19 else 20 return N>0 ?1:0; 21 } 22 link NEW(Item item, link next) 23 { 24 link x = malloc(sizeof *x); 25 x->item=item; x->next=next; 26 return x; 27 } 28 void QUEUinit(int maxN) 29 { 30 N1=maxN; 31 head=NULL; 32 } 33 int QUEUempty(void) 34 { 35 return N; 36 } 37 void QUEUput(Item item) 38 { 39 if(head==NULL) 40 { 41 head=(tail=NEW(item, head)); 42 return ; 43 } 44 tail->next=NEW(item, tail->next); 45 tail=tail->next; 46 N++; 47 } 48 Item QUEUget(void) 49 { 50 if(STACKerror(0)) 51 { 52 Item item=head->item; 53 link t=head->next; 54 free(head);head=t; 55 N--; 56 return item; 57 } 58 else 59 printf("\nSTACKpop false"); 60 return NULL; 61 }
main.c (主程序)
1 #include <stdio.h> 2 #include "FIFO.h" 3 4 int main(void) 5 { 6 int N; 7 Item str[11]; 8 scanf("%s", str); 9 getchar(); 10 11 N=sizeof(str)/sizeof(str[0]); 12 printf("%d\n",N); 13 14 QUEUinit(N); 15 for(int i=0; i<N; i++) 16 { 17 QUEUput(str[i]); 18 } 19 for(int i=0; i<N; i++) 20 { 21 printf("%c",QUEUget()); 22 } 23 24 return 0; 25 }