队列也比较的简单,先进先出。流行的做法也是用数组实现。
结构体如下:
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
直接上参考代码了:
#include<stdio.h>
#include<stdlib.h>
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
typedef struct Queue queue;
/*创建一个空的队列
形参代表这个队列的长度最大是多少*/
queue *createQueue(int capacity)
{
queue *Q = (queue*)malloc(sizeof(queue));
Q->capacity=capacity;
Q->front = Q->rear =0;
Q->size=0;
Q->num=(int*)malloc(sizeof(int)*capacity);
return Q;
}
/*判断一个队列是否为空
为空的话返回1,否则返回0*/
int isEmpty(queue* Q)
{
return Q->size==0?1:0;
}
/*判断一个队列是否为满
满的话返回1,否则返回0*/
int isFull(queue*Q)
{
return Q->size==Q->capacity?1:0;
}
/*入队*/
void inQueue(int x, queue* Q)
{
if(isFull(Q))
{
printf("Queue is full\n");
exit(1);
}
Q->size++;
Q->num[Q->rear++]=x;
if(Q->rear ==Q->capacity)
Q->rear=0;//使用循环数组方式
}
/*出队
返回元素的值*/
int outQueue(queue *Q)
{
int temp;
if(isEmpty(Q))
{
printf("Queue is empty\n");
exit(1);
}
temp=Q->num[Q->front];
Q->size--;
Q->front++;
if(Q->front==Q->capacity)
Q->front=0;
return temp;
}
/*释放队列所占的空间*/
void deleteQueue(queue* Q)
{
if(Q!=NULL)
{
free(Q->num);
free(Q);
}
}