(C)顺序循环队列的基本实现

#include<stdio.h>
#include<stdlib.h> 
#define size 10
enum return_val{malloc_ok,malloc_no,
	full_ok,full_no,empty_ok,empty_no,push_ok
};
struct queue_data{
	int queue[size];
	int rear;
	int front;
};
typedef struct queue_data Queue;
int  create_queue(Queue ** queue)
{
	*queue=(Queue *)malloc(sizeof(Queue));
	if((*queue)==NULL)
	{
		return malloc_no;
	}
	return malloc_ok;
}
void init_queue(Queue **queue)   //初始化 
{
	(*queue)->rear=0;
	(*queue)->front=0;
}
int is_full(Queue **queue)
{
	if( ( ((*queue)->rear)+1 ) % size == (*queue)->front )    //判断队列是否满 
	{
		return full_ok;
	}
	return full_no;
}
int is_empty(Queue **queue)
{
	if( ( (*queue)->rear) == ((*queue)->front))       //判空 
	{
		return empty_ok;
	}
	return empty_no;
	
}
int push_queue(Queue **queue,int num)        //入队 
{

	if(is_full(queue) == full_ok)
	{
		printf("the queue is full\n");
		return full_ok;
	}

		(*queue)->queue[(*queue)->rear]=num;
		(*queue)->rear=( ( (*queue)->rear ) + 1 )%size;	

	
	return push_ok;
}
int pop_queue(Queue **queue)  //出队 
{
	if(is_empty(queue) == empty_ok)
	{
		printf("the queue is empty!\n");
		exit(empty_ok);
	}
	int res=(*queue)->queue[((*queue)->front)];
	(*queue)->front=((*queue)->front+1)%size;
	return  res;
	
}	

int main()
{
	Queue *queue;
    if(malloc_ok == create_queue(&queue))
    {
    	printf("create queue success!\n");
	}
	else
	{
		exit(-1);
	}
	init_queue(&queue);
	
	int i;
    for(i = 0; i <11 ; i++)
	{
		if(push_queue(&queue,i+1) == push_ok)
		{
			printf("push num: %d\n",i+1);
		}
	}
	for(i = 0; i < 5; i++)
	{
        printf("pop num: %d\n",pop_queue(&queue));
	}

     printf("now front num: %d\n",queue->queue[(queue->front)]);
      for(i = 0; i <3 ; i++)
	{
		if(push_queue(&queue,i+1) == push_ok)
		{
			printf("push num: %d\n",i+1);
		}
	}
	 printf("now rear num: %d\n",queue->rear);
	free(queue);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值