循环队列

队列分为两种,一种是链式队列,一种是静态队列,而静态队列一般通过循环队列来实现。下面是一个简单的循环队列的程序。

#include<stdio.h>
#include<malloc.h>


typedef struct queue
{

	int *pBase;
	int rear;
	int front;

}QUEUE;

void init_queue(QUEUE*);//初始化队列

void en_queue(QUEUE*,int );//入队
bool full_queue(QUEUE*);//判断是否已满
bool empty_queue(QUEUE*);//判断是否为空

void traverse_queue(QUEUE*);

void out_queue(QUEUE*);

int main()
{
	QUEUE Queue;

	init_queue( &Queue);

	en_queue(&Queue,4);
	en_queue(&Queue,5);
	en_queue(&Queue,6);
	en_queue(&Queue,7);
	en_queue(&Queue,8);
	en_queue(&Queue,9);
	en_queue(&Queue,10);
	en_queue(&Queue,11);

	traverse_queue(&Queue);

	out_queue(&Queue);
	traverse_queue(&Queue);
	

	free(Queue.pBase);



	return 0;
}

void init_queue(QUEUE* Queue)
{

	Queue->pBase = (int*)malloc(sizeof(int) * 6);

	Queue->front = Queue->rear = 0;
}



void en_queue(QUEUE* Queue,int val)
{
	if(full_queue(Queue))
		printf("队列已满\n");
	else
	{

		Queue->pBase[Queue->rear] = val;

		Queue->rear = (Queue->rear + 1)%6;
	}


}

bool full_queue(QUEUE* Queue)
{

	if((Queue->rear+1)%6 == Queue->front)
		return true;
	else 
		return false;

}
bool empty_queue(QUEUE *Queue)
{

	if(Queue->front == Queue->rear)
		return true;
	else
		return false;
}






void  traverse_queue(QUEUE* Queue)
{

	
	
		int q =	Queue->front;
		while(q != Queue->rear)
		{
		
			printf("%d",Queue->pBase[q]);

			q = 	(q+1)%6;


		}

		printf("\n");



}


void out_queue(QUEUE*Queue)
{
	if(empty_queue(Queue))
		printf("队列是空的\n");

	else
	{
			int pval = 0;
		 pval = Queue->pBase[Queue->front];//存放删除元素的值
		Queue->front = (Queue->front + 1)%6;
	
		

	}


}


程序执行的结果是:

 

今天是国庆节的第二天,早上起来后写的一个关于队列的程序。上一年的国庆节去了张家界,觉得蛮好玩的。现在阳光明媚,是适合出去玩的好时光,必经大学时间越来越少了。由于准备找工作,这个国庆假期就这样搁浅了。不知道以后还有多少这样的晴天?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值