队列是先入先出的,即先入队的数据先出队
下面这个程序具有入队,出队,遍历队列数据的功能
#include <stdio.h>
#include <malloc.h>
typedef struct
{
int* pBase;
int front;
int rear;
}QUEUE;
//初始化静态队列,创建能够存储5个数据的静态队列
void Init_queue(QUEUE* _pQ)
{
_pQ->pBase = (int *)malloc(sizeof(int)*6);
_pQ->front = 0;
_pQ->rear = 0;
}
//判断此队列是否为满
int full_queue(QUEUE *_pQ)
{
if(_pQ->front == (_pQ->rear+1)%6)
{
return 0;
}
else
{
return -1;
}
}
//入队
int en_queue(QUEUE* _pQ, int _iVal)
{
if(0 == full_queue(_pQ))
{
printf("----input %d fail, because queue is full\n", _iVal);
return -1;
}
else
{
_pQ->pBase[_pQ->rear] = _iVal;
_pQ->rear = (_pQ->rear + 1)%6;
return 0;
}
}
//对队列进行遍历
int traverse_queue(QUEUE* _pQ)
{
int i = _pQ->front;
while(i != _pQ->rear)
{
printf("%d ", _pQ->pBase[i]);
i = (i+1)%6;
}
printf("\n");
return 0;
}
//判断队列是否为空
int empty_queue(QUEUE* _pQ)
{
if(_pQ->front == _pQ->rear)
{
return 0;
}
else
{
return -1;
}
}
//队列出站
int out_queue(QUEUE* _pQ, int* _piVal)
{
if(0 == empty_queue(_pQ))
{
printf("----This queue is empty\n");
return -1;
}
else
{
*_piVal = _pQ->pBase[_pQ->front];
_pQ->front = (_pQ->front + 1)%6;
}
return 0;
}
int main()
{
int iVal = 0;
QUEUE Queue;
Init_queue(&Queue);
en_queue(&Queue, 1);
en_queue(&Queue, 2);
en_queue(&Queue, 3);
en_queue(&Queue, 4);
en_queue(&Queue, 5);
en_queue(&Queue, 6);
en_queue(&Queue, 7);
traverse_queue(&Queue);
if(0 == out_queue(&Queue, &iVal))
{
printf("----Out data is %d\n", iVal);
}
traverse_queue(&Queue);
return 0;
}
程序的运行结果:
此程序是能够存放5个数据的静态队列,可以看到1-5已经入队,而数据6和数据7没有入队,因为队空间已满。
在队列中删除元素,即出队,可以看到先入队的1被删除,即说明了先入队的先出队,并且是从队首进行出队。