源代码
Queue.h
1 #include<iostream> 2 using namespace std; 3 #define QMaxSize 100 //队列最大容量 4 typedef int QElemType;//提高程序可读性 5 typedef QElemType Queue_Data; //队列存储元素类型 6 typedef struct QueueNode //存储结构 7 { 8 Queue_Data data[QMaxSize]; 9 int front; 10 int rear; 11 int count; 12 }QueueNode,*Que; 13 class Queue 14 { 15 private: 16 Que Q; 17 public: 18 Queue();//初始化空的队列 19 bool EnterQueue(Queue_Data e);// 入队操作 20 bool DeleteQueue(Queue_Data *e);//出队操作; 21 bool IsEmpty();//判空 22 bool IsFull();//判满 23 void Display(); 24 }; 25 Queue::Queue() 26 { 27 Q=new QueueNode; 28 Q->front=0; 29 Q->rear=0; 30 Q->count=0; 31 } 32 bool Queue::EnterQueue(Queue_Data e) 33 { 34 if(!IsFull())//如果队列不满的话,增加元素 35 { 36 Q->count++;//计数器示数即为队列元素个数 37 Q->data[Q->rear]=e;//队尾指针所指空间即为下一个入队元素的存放位置 38 Q->rear=(Q->rear+1)%QMaxSize;//队列的精华 39 return true; 40 } 41 else return false; 42 } 43 bool Queue::DeleteQueue(Queue_Data *e) 44 { 45 if(!IsEmpty())//如果队列不为空,操作合法 46 { 47 *e=Q->data[Q->front];//队首指针指示位置即为要出队元素的位置 48 Q->front=(Q->front+1)%QMaxSize;//这里容易出错,切记是加一 49 Q->count--; 50 return true; 51 } 52 else return false; 53 } 54 bool Queue::IsEmpty() 55 { 56 if(Q->count==0)//判空最简单的一种计数器方法 57 return true; 58 else 59 return false; 60 } 61 bool Queue::IsFull() 62 { 63 if(Q->count==QMaxSize)//判满,计数器 64 return true; 65 else 66 return false; 67 } 68 void Queue::Display() 69 { 70 int b; 71 int p; 72 b=Q->count; 73 p=Q->front; 74 while(b) 75 { 76 cout<<Q->data[p]<<endl; 77 p=(p+1)%QMaxSize; 78 b--; 79 } 80 }
测试函数
Main.cpp
int main() { Queue q; bool t; while(true) { cout<<"是否入队 "<<endl; cout<<"是 1"<<endl; cout<<"否 0"<<endl; cin>>t; if(!t) { break; } Queue_Data e; cout<<"请输入队元素"<<endl; cin>>e; if(!q.EnterQueue(e)) cout<<"Defeat"<<endl; } q.Display(); while(true) { cout<<"是否出队 "<<endl; cout<<"是 1"<<endl; cout<<"否 0"<<endl; cin>>t; if(!t) { break; } Queue_Data e; if(q.DeleteQueue(&e)) cout<<"出队元素 "<<e<<endl; else cout<<"Defeat"<<endl; } q.Display(); return 0; }
运行结果