#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
#define N 64
typedef struct sqlqueque
{
datatype data[N];
int front;
int rear;
}queue;
queue * sqlqueque_create();
int sqlqueque_full(queue * Q);
int sqlqueque_push(queue * Q,datatype value);
int sqlqueque_empty(queue *Q);
int sqlqueque_pop(queue *Q);
void sqlqueque_clear(queue *Q);
void sqlqueque_free(queue *Q);
int main(int argc, const char *argv[])
{
queue * Q = sqlqueque_create();
if(NULL == Q)
{
printf("函数调用失败\n");
return -1;
}
sqlqueque_push(Q,1);
sqlqueque_push(Q,2);
sqlqueque_push(Q,3);
sqlqueque_push(Q,4);
sqlqueque_push(Q,5);
sqlqueque_pop(Q);
sqlqueque_pop(Q);
sqlqueque_pop(Q);
sqlqueque_pop(Q);
sqlqueque_pop(Q);
sqlqueque_pop(Q);
sqlqueque_clear(Q);
sqlqueque_free(Q);
return 0;
}
queue * sqlqueque_create()
{
queue * Q = (queue *)malloc(sizeof(queue));
if(Q == NULL)
{
printf("内存空间开辟失败\n");
return NULL;
}
Q->front = 0;
Q->rear = 0;
return Q;
}
int sqlqueque_push(queue * Q,datatype value)
{
if(sqlqueque_full(Q))
{
printf("队列已满,无法继续插入\n");
return -1;
}
Q->data[Q->rear] = value;
//对队列的尾部来说,采用这种方式进行向后走的操作,走到头之后重新回到队列data[0]位置
Q->rear = (Q->rear+1)%N;
return 0;
}
int sqlqueque_full(queue * Q)
{
return (Q->rear+1)%N == Q->front;
}
int sqlqueque_empty(queue *Q)
{
return Q->front == Q->rear;
}
int sqlqueque_pop(queue *Q)
{
if(sqlqueque_empty(Q))
{
printf("队列已空,无法出栈\n");
return -1;
}
printf("pop= %d\n",Q->data[Q->front]);
Q->front = (Q->front+1)%N;
return 0;
}
void sqlqueque_clear(queue *Q)
{
Q->front = Q->rear;
}
void sqlqueque_free(queue *Q)
{
free(Q);
Q = NULL;
}