資料結構-迴圈佇列的基本操作函式實現(含全部程式碼)
阿新 • • 發佈:2018-12-10
主要包含以下函式:
- InitQueue(SqQueue &Q) 引數:迴圈佇列Q 功能:初始化迴圈佇列Q 時間複雜度:O(1)
- QueueEmpty(SqQueue Q) 引數:迴圈佇列Q 功能:判斷隊空與否 時間複雜度:O(1)
- EnQueue(SqQueue &Q,QElemType e) 引數:迴圈佇列Q,元素e 功能:使元素e入隊 時間複雜度:O(1)
- DeQueue(SqQueue &Q,QElemType &e) 引數:迴圈佇列Q,元素e 功能:隊頭出隊,用e返回值 時間複雜度:O(1)
- GetHead(SqQueue &Q,QElemType &e) 引數:迴圈佇列Q,元素e 功能:獲取隊頭元素e 時間複雜度:O(1)
程式碼:
/* Project: sequentially_cyclic_queue (順序結構迴圈佇列) Date: 2018/09/16 Author: Frank Yu InitQueue(SqQueue &Q) 引數:迴圈佇列Q 功能:初始化迴圈佇列Q 時間複雜度:O(1) QueueEmpty(SqQueue Q) 引數:迴圈佇列Q 功能:判斷隊空與否 時間複雜度:O(1) EnQueue(SqQueue &Q,QElemType e) 引數:迴圈佇列Q,元素e 功能:使元素e入隊 時間複雜度:O(1) DeQueue(SqQueue &Q,QElemType &e) 引數:迴圈佇列Q,元素e 功能:隊頭出隊,用e返回值 時間複雜度:O(1) GetHead(SqQueue &Q,QElemType &e) 引數:迴圈佇列Q,元素e 功能:獲取隊頭元素e 時間複雜度:O(1) */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> using namespace std; #define Status int #define QElemType int #define MaxQSize 100 //迴圈佇列資料結構 typedef struct { QElemType data[MaxQSize];//資料域 int front,rear; //隊頭隊尾指標 }SqQueue; //***************************基本操作函式**************************// //初始化函式 Status InitQueue(SqQueue &Q) { Q.front=Q.rear=0; return 1; } //判斷隊空函式 bool QueueEmpty(SqQueue Q) { if(Q.front!=Q.rear)return false; else return true; } //入隊函式 bool EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MaxQSize==Q.front)return false; //佇列滿 犧牲一個以判斷 Q.data[Q.rear]=e; Q.rear=(Q.rear+1)%MaxQSize;//指標加1 取模 return true; } //出隊函式 bool DeQueue(SqQueue &Q,QElemType &e) { if(Q.front==Q.rear)return false;//隊空 其實可以呼叫QueueEmpty 不然要它幹啥呢 //嚴蔚敏版 給了判空函式,但在其他基本操作函式中也沒用 e=Q.data[Q.front]; Q.front=(Q.front+1)%MaxQSize;////指標加1 取模 return true; } //取隊頭 bool GetHead(SqQueue &Q,QElemType &e) { if(Q.front==Q.rear)return false;//隊空 其實可以呼叫QueueEmpty 不然要它幹啥呢 //嚴蔚敏版 給了判空函式,但在其他基本操作函式中也沒用 e=Q.data[Q.front]; return true; } //**************************功能實現函式****************************// //入隊功能函式 呼叫EnQueue函式 void EnterToQueue(SqQueue &Q) { int n;QElemType e;int flag; printf("請輸入入隊元素個數(>=1):\n"); scanf("%d",&n); for(int i=0;i<n;i++) { printf("請輸入第%d個元素的值:",i+1); scanf("%d",&e); flag=EnQueue(Q,e); if(flag)printf("%d已入隊\n",e); else {printf("隊已滿!!!\n");break;} } } //出隊函式 呼叫DeQueue函式 void DeleteFromQueue(SqQueue &Q) { int n;QElemType e;int flag; printf("請輸入出隊元素個數(>=1):\n"); scanf("%d",&n); for(int i=0;i<n;i++) { flag=DeQueue(Q,e); if(flag)printf("%d已出隊\n",e); else {printf("隊已空!!!\n");break;} } } //獲得隊頭元素 呼叫GetHead函式 void GetHeadOfQueue(SqQueue Q) { QElemType e;bool flag; flag=GetHead(Q,e); if(flag)printf("隊頭元素為:%d\n",e); else printf("隊已空!!!\n"); } //選單 void menu() { printf("********1.入隊 2.出隊*********\n"); printf("********3.取隊頭元素 4.退出*********\n"); } //主函式 int main() { SqQueue Q;int choice; InitQueue(Q); while(1) { menu(); printf("請輸入選單序號:\n"); scanf("%d",&choice); if(choice==4) break; switch(choice) { case 1:EnterToQueue(Q);break; case 2:DeleteFromQueue(Q);break; case 3:GetHeadOfQueue(Q);break; default:printf("輸入錯誤!!!\n"); } } return 0; }
結果截圖:
有問題請下方評論,轉載請註明出處,並附有原文連結,謝謝!如有侵權,請及時聯絡。