代码语言:javascript复制
1 #include<stdio.h>
2 #include<malloc.h>
3
4 typedef struct Queue{
5 int * pBase;//数组名就是第一个数组元素的地址
6 int front;//队首第一个元素下标
7 int rear;//队尾最后一个有效元素的下一个元素
8 }QUEUE;
9
10 //函数声明,此处可不写形参
11 void init(QUEUE *);//初始化队列,此处使用指针!!
12 bool en_queue(QUEUE *,int);//入队(从最后一个元素开始),两个形参代表着往哪个数组里放、放入的元素是什么
13 bool out_queue(QUEUE *,int *);//出队(从第一个元素开始),后面的int *表示删除的元素会返回
14 void traverse_queue(QUEUE *);//遍历
15 bool full_queue(QUEUE *);//判断队列是否满
16 bool empty_queue(QUEUE *);//判断队列是否满
17
18 int main(){
19 int val;
20
21 QUEUE Q;//声明一个结构体变量Q
22
23 init(&Q);//传递实参结构体变量Q的地址
24
25 en_queue(&Q,1);//存放元素
26 en_queue(&Q,11);
27 en_queue(&Q,123);
28 en_queue(&Q,15);
29 en_queue(&Q,16);
30 en_queue(&Q,19);
31
32 traverse_queue(&Q);//遍历输出
33
34 if( out_queue(&Q,&val) ){
35 printf("出队成功,出队元素是:%d",val);
36 }
37 else{
38 printf("出队失败");
39 }
40
41
42 return 0;
43 }
44
45 void init(QUEUE *pQ){
46 //长度为6的数组,动态分配内存24个字节
47 pQ->pBase = (int *)malloc(sizeof(int)*6);
48 //队列的初始状态,队首和队尾的下标都是0
49 pQ->front = 0;
50 pQ->rear = 0;
51 }
52
53 full_queue(QUEUE *PQ){
54 if((pQ->rear 1) % 6 == pQ->front){
55 return true;
56 }
57 else{
58 return false;
59 }
60 }
61
62 bool en_queue(QUEUE * pQ,int val){
63 if( full_queue(pQ)){
64 return false;
65 }
66 else{
67 pQ -> pBase[pQ->rear] = val;
68 //因为rear的位置是在队尾最后一个有效元素的下一个元素,
69 //所以将val存入rear的位置
70 pQ->rear = (pQ->rear 1) % 6;//rear后移一位
71 return true;
72 }
73 }
74
75 void traverse_queue(QUEUE *pQ){
76 int i = pQ->front;
77 while(i != pQ->rear){
78 printf("%d ",pQ->pBase[i]);
79 i = (i 1) % 6;
80 }
81 return;
82 }
83
84 bool empty_queue(QUEUE *pQ){
85 if( pQ->fromt == pQ->rear){
86 return true;
87 }
88 else{
89 return false;
90 }
91 }
92
93 bool out_queue(QUEUE *pQ, int *pVal){
94 if( emput_queue(pQ)){
95 return false;
96 }
97 else{
98 pVal = pQ->pBase[pQ->front];
99 pQ->front = (pQ->front 1) % 6 ;
100 return true;
101 }
102 }