生活随笔
收集整理的這篇文章主要介紹了
                                
c语言数组方式实现静态循环队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            1 循環隊列原理圖
 
 
 
 
 
2 結構體設計
 
 
 
 
 
3 運行結果圖
 
 
 
 
 
4 完整源代碼
 
 
 
 
#include<stdio.h>
#include<malloc.h>
/*這是一個c語言用數組方式實現循環隊列程序time : 2015-08-23by paul
*/
typedef struct Queue{int length; //數組長度int *pbase; //數組int  head;//int類型'頭指針'int  tail; //int類型'尾指針'}Queue,*PQueue;PQueue initQueue();
void enQueue(PQueue pQueue,int val);
int isFull(PQueue pQueue);
int isEmpty(PQueue pQueue);
void traverseQueue(PQueue pQueue);
void outQueue(PQueue pQueue);
void destroyQueue(PQueue pQueue);int main(void){//初始化隊列PQueue PQueue = initQueue();traverseQueue(PQueue);//入隊int i = 0 ;for(; i < 20 ; i++){enQueue(PQueue,i);}//入隊后第一次遍歷traverseQueue(PQueue);//第一次出隊int j = 0;for(;j<3;j++){outQueue(PQueue);}//第一次出隊遍歷traverseQueue(PQueue);//第二次出隊for(;j<5;j++){outQueue(PQueue);}//第二次出隊遍歷
traverseQueue(PQueue);//第三次出隊for(;j<10;j++){outQueue(PQueue);}//第三次出隊遍歷
traverseQueue(PQueue);//銷毀隊列
destroyQueue(PQueue);return 1;
};//出隊
void outQueue(PQueue pQueue){if(isEmpty(pQueue)){printf("出隊失敗,隊列為空\n");}else{printf("%d 出隊成功\n",*(pQueue->pbase + pQueue->head));pQueue->head = (pQueue->head + 1)% pQueue->length;}
}//初始化循環隊列
PQueue initQueue(){int lengh = 8;//隊列長度為8//初始化隊列PQueue pQueue = (Queue *)malloc(sizeof(Queue));if(pQueue == NULL){printf("初始化隊列失敗,內存不夠了\n");}pQueue->length = lengh;pQueue->pbase = (int *)malloc(sizeof(int)* pQueue->length);if(pQueue->pbase == NULL){printf("初始化數組失敗,內存不夠了\n");}pQueue->head = 0;pQueue->tail = 0;printf("初始化隊列長度為%d\n",pQueue->length);return pQueue;};//隊列是否為空
int isEmpty(PQueue pQueue){if(pQueue->head == pQueue->tail){return 1;}else{return 0;}
};int isFull(PQueue pQueue){/*得到隊列實際的元素個數這里采用的邏輯為:1 隊列實際長度 + 1 = 隊列初始化長度2 好處: 可以區分隊滿和隊空的情況2.1 初始化隊列為空時 pQueue->pHead2.2 假設一直有數據在入隊,那么當pTail達到了數組最大長度后,又從頭開始,會存在 pQueue->pHead = pQueue->pTail情況.2.1和2.2隊滿和隊空的情況就可以區別開來*/if((pQueue->tail + 1)% pQueue->length == pQueue-> head){return 1;}else{return 0;}};//遍歷隊列
void traverseQueue(PQueue pQueue){printf("循環隊列的元素為: \n");if(isEmpty(pQueue)){printf("隊列為空\n");}else{int head = pQueue->head ;while((head!= pQueue->tail)){printf("%d ",*(pQueue->pbase+head));head = (head + 1)%pQueue->length;}}printf("\n");}//入隊
void enQueue(PQueue pQueue,int val){//隊列是否否已滿if(isFull(pQueue)){printf("隊列已滿, %d 不能入隊\n",val);}else{*(pQueue->pbase +  pQueue->tail) = val;pQueue->tail = pQueue->tail + 1;printf("%d 成功入隊\n",val);}};//銷毀隊列
void destroyQueue(PQueue pQueue){if(!isEmpty(pQueue)){while( pQueue->head != pQueue->tail ){int head = pQueue->head;pQueue->head = (pQueue->head + 1)%pQueue->length;free(pQueue->pbase+head);}}free(pQueue);printf("銷毀隊列成功\n");
}
 
 
 
 
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
                            
總結
                            
                                以上是生活随笔為你收集整理的c语言数组方式实现静态循环队列的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。