队列
1.队列定义
- 先进先出first in first out
- 按照到达的顺序删除元素
- 所有的插入在表的一端进行,所有的删除在表的另一端
- 主要元素 : 队头front 队尾rear
- 主要操作: enQueue deQueue getFront isEmpty
2.实现方式
- 顺序队列 关键是防止假溢出
- 链式队列 用单链表方式存储
顺序队列(采用循环队列实现)
1 #include<iostream> 2 using namespace std; 3 const int QueueSize=100; 4 5 class CirQueue 6 { 7 public: 8 CirQueue() //构造函数,置空队列 9 { 10 front=rear=0; 11 } 12 ~CirQueue(){cout<<"destory";} //析构函数 13 void EnQueue(int x); //元素x入队 14 int DeQueue(); //队头元素出队 15 int GetQueue(); //获取队头元素,不删除队头 16 bool Empty() //判断队列是否为空 17 { 18 if(front==rear) 19 return 1; 20 else 21 return 0; 22 } 23 private: 24 int data[QueueSize]; //存放队列的数组 25 int front,rear; //头指针与尾指针 26 }; 27 28 void CirQueue::EnQueue(int x) 29 { 30 if((rear+1)%QueueSize==front) //判断队列是否已满 31 cout<<"queue is full,can't put "<<x<<" into it"<<endl; 32 else 33 { 34 rear=(rear+1)%QueueSize; //移动尾指针指向下一个空间 35 data[rear]=x; //元素x入队 36 } 37 } 38 39 int CirQueue::DeQueue() //队头元素出栈 40 { 41 if(Empty()) //判断队列是否为空 42 cout<<"queue is empty"<<endl; 43 else 44 { 45 front=(front+1)%QueueSize; //移动队头指针指向下一个空间,即被删元素所在位置 46 return data[front]; //返回被删除的元素的值 47 } 48 } 49 50 int CirQueue::GetQueue() 51 { 52 if(Empty()) 53 cout<<"queue is empty"<<endl; 54 else 55 { 56 return data[(front+1)%QueueSize]; 57 } 58 } 59 int main() 60 { 61 CirQueue Q; 62 Q.EnQueue(5); 63 Q.EnQueue(9); 64 Q.EnQueue(7); 65 cout<<Q.DeQueue()<<endl; 66 cout<<Q.GetQueue()<<endl; 67 cout<<Q.DeQueue()<<endl; 68 cout<<Q.DeQueue()<<endl; 69 Q.DeQueue(); 70 return 0; 71 }