#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;
}
转载于:https://www.cnblogs.com/billcharint/p/10729607.html
转载请注明原文地址: https://win8.8miu.com/read-26231.html