队列是只允许在表的一端进行插入(队尾),在另一端进行删除(对头)的运算受限的线性表。
#include <stdio.h>
#define QUEUESIZE 100//队列的最大容量
typedefchar DataType;//保存的数据类型。
typedef struct
{
int nFront;//头指针,指向队头元素。
int nRear;//尾指针,指向队尾元素的下一个位置
int nCount;//计数器。
DataType data [QUEUESIZE];
}CirQueue;
void InitQueue(CirQueue *Q);
int QueueFull(CirQueue *Q);
void EnQueue(CirQueue *Q ,DataType x);
int QueEmpty(CirQueue *Q);
DataType *DeQueue(CirQueue *Q);
int main(int argc,const char * argv[])
{
CirQueue queue;
InitQueue(&queue);
QueEmpty(&queue);
return 0;
}
void InitQueue(CirQueue *Q)//初始化队
{
Q->nFront=0;
Q->nRear=0;
Q->nCount=0;
}
int QueEmpty(CirQueue *Q)//判断队空。
{
return Q->nCount==0;
}
int QueueFull(CirQueue *Q)//判断队满。
{
return Q->nCount==QUEUESIZE;
}
void EnQueue(CirQueue *Q ,DataType x)//进队。
{
if (QueueFull(Q))
{
printf("队已满");
return;
}
Q->nCount++;
Q->data[Q->nRear]=x;
Q->nRear=(Q->nRear+1)%QUEUESIZE;
}
DataType *DeQueue(CirQueue *Q)
{
if (QueEmpty(Q))
{
printf("队为空!");
return NULL;
}
static DataType temp;
temp=Q->data[Q->nFront];
Q->nCount--;
Q->nFront=(Q->nFront+1)%QUEUESIZE;
return &temp;
}
DataType Quefront(CirQueue *Q)
{
return Q->data[Q->nFront];
}