隊列和棧差很少,惟一的區別就是棧式先進後出(FILO),隊列是先進先出(FIFO),隊列的示意圖以下ios
其基本操做的代碼以下spa
#include<iostream> #include<cstdlib> using namespace std; struct QNode{ int data; QNode *next; }; typedef QNode *QueuePtr; struct LinkQueue{ QueuePtr front; QueuePtr rear; }; //初始化隊列 bool InitQueue(LinkQueue &Q){ Q.front=Q.rear=new QNode; if(!Q.front){ cout<<"初始化失敗"<<endl; return false; } Q.front->next=NULL; cout<<"初始化成功"<<endl; return true; } //銷燬隊列 void DestroyQueue(LinkQueue &Q){ while(Q.front){ Q.rear=Q.front->next; delete (Q.front); Q.front=Q.rear; } cout<<"隊列已被銷燬"<<endl; } //判斷是否爲空 bool EmptyQueue(LinkQueue Q){ if(Q.front==Q.rear){ cout<<"隊列爲空"<<endl; return true; } cout<<"隊列不爲空"<<endl; return false; } //入隊 void EnQueue(LinkQueue &Q,int value){ QueuePtr p=new QNode; p->data=value; p->next=NULL; Q.rear->next=p; Q.rear=p; cout<<value<<" 已經入隊"<<endl; } //出隊(一) void DeQueue(LinkQueue &Q,int &value){ if(Q.front==Q.rear){ cout<<"隊列爲空"<<endl; return; } QueuePtr p=Q.front->next; //vlaue保存被刪的結點數據 value=p->data; Q.front->next=p->next; if(Q.rear==p){//若是p指向的是尾結點 Q.rear=Q.front; } delete p; cout<<value<<" 已經出隊"<<endl; } //出隊(二) void DeQueue2(LinkQueue &Q,int &value){ if(Q.front==Q.rear){ cout<<"隊列爲空"<<endl; return; } QueuePtr p=Q.front; Q.front=Q.front->next; value=p->data; delete p; cout<<value<<" 已經出隊"<<endl; } //隊列元素個數 void GetLength(LinkQueue Q,int &length){ length=0; QueuePtr p=Q.front; while(p!=Q.rear){ p=p->next; length++; } cout<<"隊列元素個數"<<length<<"個"<<endl; } //顯示隊列元素 void VisitQueue(LinkQueue Q){ if(Q.front==Q.rear){ cout<<"隊列爲空"<<endl; return; } QueuePtr p=Q.front; while(p!=Q.rear){ p=p->next; cout<<p->data<<" "; } cout<<endl; } void show(){ cout<<"+----------------------------------+"<<endl; cout<<"| |"<<endl; cout<<"| 1->初始化隊列 |"<<endl; cout<<"| 2->判斷隊列是否爲空 |"<<endl; cout<<"| 3->入隊 |"<<endl; cout<<"| 4->出隊 |"<<endl; cout<<"| 5->顯示隊列元素 |"<<endl; cout<<"| 6->銷燬隊列 |"<<endl; cout<<"| 7->隊列元素個數 |"<<endl; cout<<"| |"<<endl; cout<<"+----------------------------------+"<<endl; } int main(){ LinkQueue Q; int action,value,length; show(); while(cin>>action){ switch(action){ case 1: system("cls"); InitQueue(Q); break; case 2: system("cls"); EmptyQueue(Q); break; case 3: system("cls"); cout<<"請輸入入隊的元素"<<endl; cin>>value; EnQueue(Q,value); break; case 4: system("cls"); DeQueue(Q,value); break; case 5: system("cls"); VisitQueue(Q); break; case 6: system("cls"); DestroyQueue(Q); break; case 7: system("cls"); GetLength(Q,length); } system("pause"); system("cls"); show(); } }
必定要注意LinkQueue,QueuePtr,QNode之間的關係,代碼中有的地方是結構體的"."(訪問),有的地方是"->"訪問,順序要搞清楚,否則會錯一片的!blog