(20220222)循环队列的实现

#include<stdio.h>
#include<stdlib.h>

#define SIZE 11

enum ret_val
{
    MALLOC_OK = 100,
    MALLOC_NO,
    CREATE_OK,
    CREATE_NO,
    EMPTY_OK,
    EMPTY_NO,
    FULL_OK,
    FULL_NO,
    POP_OK,
    POP_NO,
    PUSH_OK,
    PUSH_NO,
};

typedef struct quece_node
{
    int quece_data[SIZE];

    int front;
    int rear;

}*Quece;

int is_malloc_ok(Quece quece)  //内存是否分配成功
{
    if(NULL == quece )
    {
	return MALLOC_NO;
    }
    return MALLOC_OK;
}

int create_circ_quece(Quece *quece)  //创建队列
{
    *quece  = (Quece)malloc(sizeof(struct quece_node));

    if(MALLOC_OK == is_malloc_ok(*quece))
    {
	return CREATE_OK;
    }
    return CREATE_NO;
}
    
void init_quece(Quece quece)   //初始化队列 
{
    quece->front = 0;
    quece->rear = 0;
}

int is_empty(Quece quece)   //判断空
{
    if(quece->front == quece->rear)
    {
	return EMPTY_OK;
    }
    return EMPTY_NO;
}

int is_full(Quece quece)  //判断满
{
    if((quece->rear + 1)%SIZE == quece->front)
    {
	return FULL_OK;
    }
    return FULL_NO;
}

int push_quece(Quece quece, int num) //进队
{
    if(FULL_NO == is_full(quece))
    {
	quece->rear = (quece->rear + 1)%SIZE;
	quece->quece_data[quece->rear] = num;
	return PUSH_OK;
    }
    else
    {   printf("quece is full!\n");
	return PUSH_NO;
    }
}
    
int pop_quece(Quece quece, int *num)  //出队
{
    if(EMPTY_NO == is_empty(quece))
    {
	quece->front = (quece->front + 1)%SIZE;
        *num = quece->quece_data[quece->front];
       return POP_OK;	
    }
    else
    {
       printf("quece is empty!\n");
       return POP_NO;
    }
}

void make_empty(Quece quece)  //置空
{
    
    quece->front = 0;
    quece->rear = 0;
    printf("the quece is empty!\n");
}

int main()
{
    Quece quece = NULL;
    int i;
    int num;

    if(CREATE_NO == create_circ_quece(&quece))  //创建队列
    {
	return 0;
    }

    init_quece(quece);   //初始化队列 
    
    printf("push quece!\n");
    for(i = 0; i < 10; i++)
    {   
	num = i + 1;
        if(PUSH_OK == push_quece(quece, num)) //进栈
	{
            printf("push quece is success!\n");
	}
	else
	{
	    printf("push quece is fail!\n");
	}
    }
    
   // make_empty(quece);  //置空

    printf("pop quece!\n");
    for(i = 0; i < 10; i++)
    {
        if(POP_OK == pop_quece(quece, &num))  //出栈
	{
            printf("%d\n", num);
	}
	else
	{
	    printf("pop quece is fail!\n");
	}
    }

    make_empty(quece);  //置空

    free(quece);   //释放

注意:循环队列必然会浪费一个空间 10个数 需要11个空间!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值