循环队列程序演示
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 }
如果真的不知道做什么 那就做好眼前的事情吧 你所希望的事情都会慢慢实现...