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

随机队列 ADT接口 数组实现

程序员文章站 2022-04-24 16:46:17
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 }