1 //数据结构 --队列 2 //静态队列-用数组实现 3 //静态队列通常是循环队列 4 //循环队列讲解 5 //1.静态队列为什么必须是循环队列? 6 //2.循环队列需要几个参数来确定? 7 /* 8 front 和 rear 9 1)队列初始化,font和rear的值都为零 10 2)队列非空 11 font代表的是队列的第一个元素 12 rear代表的是队列的最后一个有效元素的下一个元素 13 3)队列空 14 front和rear值 15 */ 16 //3.循环队列各个参数的含义? 17 //4.如何判断循环队列是否为空? 18 /* 19 front与rear值相等,则该队列就一定为空; 20 */ 21 //5.如何判断循环队列是否已满? 22 /* 23 1)利用标志参数来判定是否已满; 24 2)少用一个元素 25 if((r+1)%数组长度==f) 26 已满; 27 else 28 不满; 29 */ 30 //6.循环队列入队伪算法讲解 31 #include <stdio.h> 32 33 typedef struct Queue 34 { 35 int *pBase; 36 int front; 37 int rear; 38 }QUEUE; 39 40 void init(QUEUE*); 41 bool en_queue(QUEUE*, int val); 42 void traverse_queue(QUEUE); 43 bool out_queue(QUEUE*, int *); 44 bool empty_queue(QUEUE* pQ); 45 46 int main(void) 47 { 48 QUEUE Q; 49 en_queue(&Q, 1); 50 en_queue(&Q, 1); 51 en_queue(&Q, 1); 52 init(&Q); 53 return 0; 54 } 55 56 void init(QUEUE *pQ) 57 { 58 pQ->pBase = (int*)malloc(sizeof(int)*6); 59 pQ->front = 0; 60 pQ->rear = 0; 61 } 62 63 bool en_queue(QUEUE* pQ, int val) 64 { 65 if (full_queue(pQ)) 66 { 67 return false; 68 } 69 else 70 { 71 pQ->pBase[pQ->rear] = val; 72 pQ->rear = (pQ->rear + 1)%6; 73 return true; 74 } 75 } 76 77 bool full_queue(QUEUE *pQ) 78 { 79 if (pQ->front == (pQ->rear + 1) % 6) 80 { 81 return true; 82 } 83 else 84 { 85 return false; 86 } 87 } 88 89 void traverse_queue(QUEUE *pQ) 90 { 91 int i = pQ->front; 92 while (i != pQ->rear) 93 { 94 printf("%d",pQ->pBase[i]); 95 i = (i + 1) % 6; 96 } 97 return; 98 } 99 100 bool empty_queue(QUEUE *pQ) 101 { 102 if (pQ->rear == pQ->front) 103 { 104 return true; 105 } 106 else 107 { 108 return false; 109 } 110 } 111 112 bool out_queue(QUEUE*pQ, int* pVal) 113 { 114 if (empty_queue(pQ)) 115 { 116 return false; 117 } 118 119 int i = 0; 120 while (i != pQ->rear) 121 { 122 *pVal = pQ->pBase[pQ->front]; 123 pQ->front = (pQ->front + 1) % 6; 124 } 125 return true; 126 } 127 128 //队列的具体应用:所有和时间有关的都与队列有关