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("
内存已满或为空");
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("输入字符串
");
15 while((N=getchar())!='
')
16 {
17 if(N=='*')
18 {
19 putchar(RANDOMQUEUEtailget());
20 //putchar('
');
21 }
22 else
23 RANDOMQUEUEtailput(N);
24 }
25
26 return 0;
27 }