队列的顺序实现

#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;
}

 

posted on 2019-04-18 14:54  骉赑  阅读(107)  评论(0编辑  收藏  举报

导航