循环队列(顺序队列)的实现

//循环队列(顺序队列)的实现
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

#define N 6 
//定义数据类型
typedef int datatype_t;

//定义结构体
typedef struct{
    datatype_t data[N];
    int front;
    int rear;
}sequeue_t;
sequeue_t *sq;
//创建一个空的队列
sequeue_t *sequeue_create()
{
    static sequeue_t Sequeue_list;
    sequeue_t *sq = &Sequeue_list;

    sq->front = sq->rear = 0;

    return sq;
}

//判断队列是否为空
int sequeue_empty(sequeue_t *sq)
{

    return sq->front == sq->rear ? 1 : 0;
}

//判断队列是否为满
int sequeue_full(sequeue_t *sq)
{
    return (sq->rear + 1) % N == sq->front ? 1 : 0;
}

//入队
int sequeue_push(sequeue_t *sq, datatype_t value)
{
    if(sequeue_full(sq))
    {
        //printf("sequeue is full\n");
        sequeue_pop(sq); 
        
    }

    sq->data[sq->rear] = value;
    sq->rear = (sq->rear + 1) % N;
    printf("sequeue_push is ok %d \n",value);
    return 0;
}

//出队
datatype_t sequeue_pop(sequeue_t *sq)
{
    if(sequeue_empty(sq))
    {
        printf("sequeue is empty\n");
        return (datatype_t)-1;
    }

扫描二维码关注公众号,回复: 5749486 查看本文章

    datatype_t value;

    value = sq->data[sq->front];

    sq->front = (sq->front + 1) % N;

    return value;
}


int main(int argc, const char *argv[])
{
    
    sq = sequeue_create();
    int i = 0,j = 0;
    while(1){
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
        sequeue_push(sq, i++);
    
        while(!sequeue_empty(sq) && j)
        {
            printf("%d ", sequeue_pop(sq));
        }    
        if(j == 0)
            j = 1;
        else
            j = 0;
        getchar();        
        
        
    }
    
    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/farsight_2098/article/details/85774681