循环队列基本操作及遍历 C语言实现(数组)

与栈不同 队列基本原则:
先入先出 后入后出
约定一个下标(rear)指向当前入队元素要插入的下标 即最后一个入队元素下标的下一位
即 如果要加入新的元素x 执行elem[s->rear]=x

一个下标(front)指向最先出队的元素

typedef struct {
   
	int elem[MAX];
	int front;
	int rear;
}squene;

初始化 把front 和rear的值置为 0

squene * initsquene()
{
   
	squene *s=(squene *)malloc(sizeof(squene));
	s->front=0;
	s->rear=0;
	return s;
}

考虑一个MAXSIZE 为5的情况 如果进行5次 入队操作 5次出队操作 那么front和rear 都指向内存中最后一个空间 无法再加入元素 但此时队长为0

故引入循环队列 如图
在这里插入图片描述当然这只是逻辑上的 内存条还是直的 掰不弯(
此时 再出现上述情况 (即s->rear=s->front=4)把 s->rear的值置为(s->rear+1)%MAX (此时为0)可以继续进行入队操作
出队时对front的操作与此类似

但此时 无法区分空表 与满表
故放弃一个数据空间 (front的后一位 ) (顺时针为前,逆时针为后)
则判断满表的条件为 (s->rear+1)%MAX==s->front
此时即使elem[s->rear]可用来存放元素 也不使用
入队操作

int enquene(squene *s,int e)
{
   
	if((s->rear+1)%MAX==s->front)
	{
   
		puts("表满");
		return 0;
	}
		
	else
	{
   
		s->elem[s->rear]=e;
		s->rear
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值