您的位置:首页 > 理论基础 > 数据结构算法

数据结构必须掌握内容队列--入队,出队

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;
}




最后说一句,万事开头难,贵在坚持!加油,何永健!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: