循环队的顺序实现:
- 结构描述
- 初始化
- 入队
- 出队
下面是具体实现:
1.结构描述:
typedef struct Queue
{
int *pBase;
int front;
int rear;
}QUEUE;
2, 初始化:
void init(QUEUE *pQ)
{
pQ->pBase=(int *)malloc(sizeof(int)*6);
pQ->front=0;
pQ->rear=0;
}
3.入队
bool en_queue(QUEUE *pQ,int val)
{
if(full_queue(pQ))
return false;
else
{
pQ->pBase[pQ->rear]=val;
pQ->rear =(pQ->rear+1)%6;
return true;
}
}
4,出队:
bool out_queue(QUEUE *pQ,int *pVal)
{
if(empt_queue(pQ))
return false;
else
{
*pVal=pQ->pBase[pQ->front];
pQ->front =(pQ->front+1)%6;
return true;
}
}
------》源代码:
#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;
//1.结构描述:
typedef struct Queue
{
int *pBase;
int front;
int rear;
}QUEUE;
//2.初始化:
void init(QUEUE *pQ)
{
pQ->pBase=(int *)malloc(sizeof(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 empt_queue(QUEUE *pQ)
{
if(pQ->front ==pQ->rear)
return true;
else
return false;
}
//3.入队:
bool en_queue(QUEUE *pQ,int val)
{
if(full_queue(pQ))
return false;
else
{
pQ->pBase[pQ->rear]=val;
pQ->rear =(pQ->rear+1)%6;
return true;
}
}
//遍历:
void traverse_queue(QUEUE *pQ)
{
int t=pQ->front;
while(t!=pQ->rear )
{
cout<<pQ->pBase[t]<<'\t';
t=(t+1)%6;
}
cout<<endl;
}
//4.出队:
bool out_queue(QUEUE *pQ,int *pVal)
{
if(empt_queue(pQ))
return false;
else
{
*pVal=pQ->pBase[pQ->front];
pQ->front =(pQ->front+1)%6;
return true;
}
}
int main()
{
QUEUE Q;
int val;
init(&Q);
en_queue(&Q,1);
en_queue(&Q,3);
en_queue(&Q,5);
en_queue(&Q,7);
en_queue(&Q,9);
en_queue(&Q,3);
traverse_queue(&Q);
if(out_queue(&Q,&val))
cout<<"出队成功,队列出队的元素是:"<<val<<'\t';
else
cout<<"出队失败!"<<endl;
traverse_queue(&Q);
return 0;
}
如果是顺序队列那么就一定是循环队列,否则就太浪费了。