1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define OK 1
5 #define ERROR 0
6 #define MAXQSIZE 10
7 typedef int Status;
8 typedef int QElemType; //定义队列中元素类型
9
10 typedef struct
11 {
12 QElemType *base;
13 int front;
14 int rear;
15 }SqQueue; //定义循环队列类型
16
17 Status InitQueue(SqQueue & Q) ;//初始化为空队列,分配数组空间
18 Status GetHead(SqQueue Q,QElemType &e) ;//获取队头元素的值并返回在e中
19 Status EnQueue(SqQueue &Q,QElemType e);//队列非法,将元素e入队
20 Status DeQueue(SqQueue &Q,QElemType &e);//队列非法,将元素e入队
21 int QueueLength(SqQueue Q);//求队列的长度
22
23 int main()
24 {
25 SqQueue Q;
26 int m;
27 QElemType e;
28 InitQueue(Q);
29 scanf("%d",&m);
30 while(m!=0) //m=0表示操作结束
31 {
32 if(m==1) //m=1表示入队
33 {
34 scanf("%d",&e);
35 EnQueue(Q,e);
36 }
37 else if(m==2)//m=2表示出队
38 {
39 DeQueue(Q,e);
40 }
41 scanf("%d",&m);
42 }
43 printf("length=%d\n",QueueLength(Q));
44 if (GetHead(Q,e)==OK)
45 printf("first=%d",e);
46 else
47 printf("first=NULL");
48 return 0;
49 }
50
51 Status InitQueue(SqQueue & Q) //初始化为空队列,分配数组空间
52 {
53 Q.base=(QElemType *)malloc(sizeof(QElemType)*MAXQSIZE);
54 if(!Q.base)
55 return ERROR;
56 Q.front=Q.rear=0;
57 return OK;
58 }
59
60 Status GetHead(SqQueue Q,QElemType &e) //获取队头元素的值并返回在e中
61 {
62 if(Q.rear==Q.front) return ERROR;
63 e=Q.base[Q.front];
64 return OK;
65 }
66
67 Status EnQueue(SqQueue &Q,QElemType e)//队列非法,将元素e入队
68 {
69 if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
70 Q.base[Q.rear]=e;
71 Q.rear=(Q.rear+1)%MAXQSIZE;
72 return OK;
73 }
74
75 Status DeQueue(SqQueue &Q,QElemType &e)//队列非法,将元素出队
76 {
77 if(Q.rear==Q.front) return ERROR;
78 e=Q.base[Q.front];
79 Q.front=(Q.front+1)%MAXQSIZE;
80 return OK;
81 }
82
83 int QueueLength(SqQueue Q)//求队列的长度
84 {
85 return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
86 }