2021-01-21

本文介绍了数据结构中的队列,包括链式队列和静态队列(循环队列)的实现方式。队列遵循先进先出(FIFO)原则,文中给出了队列初始化、入队、出队的伪代码,并提供了判断队列空满的条件。此外,还展示了队列在时间相关操作中的应用,并给出了实际的C语言队列操作代码示例,鼓励读者通过实践加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列

分享下今天的学习成果,数据结构之队列。

队列是一种可以实现“先进先出”的数据存储结构;

常见的队列分类:

链式队列——用链表来实现
静态队列——用数组来实现(通常为循环队列)

队列初始化:两个队列基本元素,font和rear的值都为0 队列非空时:
font代表队列的第一个元素的下标;
rear代表队列最后一个有效元素的下一个元素的下标
队列为空时:
font和rear值相等,但不一定为零

常见伪算法:

入队伪算法:
第一步、将值存入rear代表的位置
第二步、rear=(rear+1)%数组的长度//可以实现循环

出队伪算法:
font=(font+1)%数组的长度

判断循环队列是否为空:
font==rear

判断循环队列是否为满:
法1:声明一个标识参数判断
法2:空出一个元素然后,font==(rear+1)%数组的长度

队列的具体应用:

所有和时间有关的操作都与队列有关

接下来是结合以上知识敲出来的队列代码:

初始化队列

void init_Queue(PQUEUE ps){
	ps->pBase=(int*)malloc(sizeof(int)*6);//分配完内存后, ps->pBase指向了一个数组首地址 
	if(ps==NULL){
		printf("队列初始化失败!程序退出!");
		exit(-1);
	}
	ps->font=0;//初始化下标 
	ps->rear=0;//初始化下标 
}

//判断队列是否未满

bool full_Queue(PQUEUE ps)
{
	if((ps->rear+1)%6==ps->font)
	{
		return true;
	}
	else return false;
}

遍历队列

bool traverse_Queue(PQUEUE ps)
{
	if(isempty_Queue(ps))
	{
		printf("队列为空!");
		exit(-1); 
	 } 
	 else
	 {
	 	int r;
	 	r=ps->font;
	 	while(r!=ps->rear)
	 	{
	 		printf("%3d",ps->pBase[r]);
	 		r=(r+1)%6; //r往下一个元素循环移动 
		 }
		 putchar('\n');
		 return true;
	 }
}

判断队列是否为空

bool isempty_Queue(PQUEUE ps)
{
	if(ps->font==ps->rear)
	{
		return true;
	}
	else return false;
 } 

//出队

bool out_Queue(PQUEUE ps,int *val)
{
	if(isempty_Queue(ps))
	{
		printf("队列为空!出队失败!");
		return false;
	}
	else
	{
		*val=ps->pBase[ps->font];
			
		ps->font=(ps->font+1)%6;
	
		return true;
	}
}

各位小伙伴在看完知识点后,也要多多练习代码哦。
希望与你共同进步!

感谢观看!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值