数据结构必须掌握内容队列--入队,出队
2015-09-05 22:08
357 查看
栈的压栈出栈的顺序是: 先进后出 ; 但是队列的入队和出队是:先进先出。 我上一篇实现了栈的压栈出栈,这次实现的队列的先进先出,废话不多说,附上代码和运行结果:
#include"stdafx.h" #include<iostream> using namespace std; typedef class queue { public: int *pbase; int front; int rear; }QUEUE; void initqueue(QUEUE *);//初始化队列 bool full_queue(QUEUE *);//判断队列是否已满 bool en_queue(QUEUE *,int);//入队 void traverse_queue(QUEUE *);//遍历队列 bool empty(QUEUE *);//判断队列是否为空 bool out_queue(QUEUE *,int *);//出队 void initqueue(QUEUE *pq) { pq->pbase=new int[6]; pq->front=0; pq->rear=0; } bool full_queue(QUEUE *pq) { if((pq->rear+1)%6==pq->front) return true; else return false; } bool en_queue(QUEUE *pq,int val)//入队操作r,取r,p->rear即是r,然后进行操作 { if(full_queue(pq)) return false; else { pq->pbase[pq->rear]=val; pq->rear=(pq->rear+1)%6 ;//这里相当于数组下标r=(r+1)%6,p->rear就是取r的值,然后p->rear+1是先取r的值,然后加1,最后再对长度取余 return true; } } void traverse_queue(QUEUE *pq)//遍历队列,需要定义一个下标进行操作 { int i=pq->front;//这里定义一个数组下标,进行队列的遍历 if(i==pq->rear) cout<<"为空"<<endl; else { while(i!=pq->rear) { cout<<pq->pbase[i]<<" "; i=(i+1)%6;//所有环型数组的递增都是(n+1)%长度,所以i的递增也要满足 } } } bool empty(QUEUE *pq) { if(pq->front==pq->rear) return true; else return false; } bool out_queue(QUEUE *pq,int *val) { if(empty(pq)) { cout<<"出队失败..."<<endl; return false; } else { *val=pq->pbase[pq->front]; pq->front=(pq->front+1)%6; cout<<"出队成功,出队元素为:"<<*val<<endl; return true; } } int main() { int val,n; QUEUE Q; initqueue(&Q); for(n=1;n<6;n++) { en_queue(&Q,n); } traverse_queue(&Q); out_queue(&Q,&val); traverse_queue(&Q); system("pause"); return 0; }
最后说一句,万事开头难,贵在坚持!加油,何永健!