随机队列 ADT接口 数组实现
程序员文章站
2022-07-10 22:10:48
Random queue ADT接口 RANDOM.h Item.h: Random queue ADT接口实现 RANDOM.c: 主程序 main.c: ......
Random queue ADT接口 RANDOM.h
1 #include <stdlib.h> 2 #include "Item.h" 3 #include <time.h> 4 #include <stdbool.h> 5 6 void RANDOMQUEUEtailput(int); 7 void RANDOMQUEUEinit(int); 8 bool RANDOMQUEUEisFull(void); 9 bool RANDOMQUEUEisEmpty(void); 10 static int RANDOMQUEUErand(void); 11 void RANDOMQUEUEerror(void); 12 Item RANDOMQUEUEtailget(void);
Item.h:
typedef char Item;
Random queue ADT接口实现 RANDOM.c:
1 #include "RANDOM.h" 2 3 static Item *Q; 4 static int N,head,tail,k=0; 5 6 7 void RANDOMQUEUEinit(int maxN) 8 { 9 Q=malloc(maxN*sizeof(*Q)); 10 N=maxN; 11 head=N; 12 tail=0; 13 } 14 void RANDOMQUEUEtailput(int ch) 15 { 16 if(RANDOMQUEUEisFull()) 17 RANDOMQUEUEerror(); 18 Q[tail]=ch; 19 tail=(tail+1)%N; 20 k++; 21 } 22 Item RANDOMQUEUEtailget(void) 23 { 24 if(RANDOMQUEUEisEmpty()) 25 RANDOMQUEUEerror(); 26 int i=RANDOMQUEUErand(); 27 Item temp=Q[i]; 28 head%=N; 29 Q[i]=Q[head]; 30 head++; 31 k--; 32 return temp; 33 } 34 bool RANDOMQUEUEisFull(void) 35 { 36 if((tail+1)%N==(head%N)) 37 return true; 38 return false; 39 } 40 bool RANDOMQUEUEisEmpty(void) 41 { 42 if(head%N==tail) 43 return true; 44 return false; 45 } 46 static int RANDOMQUEUErand(void) 47 { 48 srand(time(0)); 49 return rand()%k; 50 } 51 void RANDOMQUEUEerror(void) 52 { 53 printf("\n内存已满或为空"); 54 exit(1); 55 }
主程序 main.c:
1 #include <stdio.h> 2 #include "RANDOM.h" 3 4 5 int main(void) 6 { 7 int N; 8 printf("输入字符串大小:"); 9 if(scanf("%d", &N)) 10 RANDOMQUEUEinit(N); 11 else 12 RANDOMQUEUEerror(); 13 getchar(); 14 printf("输入字符串\n"); 15 while((N=getchar())!='\n') 16 { 17 if(N=='*') 18 { 19 putchar(RANDOMQUEUEtailget()); 20 //putchar('\n'); 21 } 22 else 23 RANDOMQUEUEtailput(N); 24 } 25 26 return 0; 27 }