队列?循环队列?

何为队列?头出尾进,意思就是指在队列数据结构中进行元素的插入和删除操作。

"头出"表示将新元素插入到队列的头部。也就是说,新元素会成为队列中的第一个元素,原有的元素依次向后移动。

"尾进"表示将新元素加入到队列的尾部。也就是说,新元素会成为队列中的最后一个元素。

由图所示,当出队时,又有原来的空间,但是只能尾进因此不能用新空出的空间,所以空间利用率低。

所以循环队列为节省空间应运而生,以下是一个简单的列子,深入前出的分析一下具体步骤吧❛‿˂̵✧

我们将入队0,1,2,3,这4个数字,很多人就会问了,存储四个数字为什么要申请五个空间呢int[5],那是因为我们需要多一个空间来进行判断尾巴和头是否相遇,毕竟小猫尾巴永远不会被自己咬到吧o(=•ェ•=) ps:【判断条件(q->rear+1) % 5 == q->front】

typedef struct a {

int data[5];

int rear,front;

}dui;

void insert(dui *q, int in) {

if ((q->rear+1) % 5 == q->front) printf("xxx");

else

{

q->rear = (q->rear+1) % 5;

q->data[q->rear] = in; }

}

刚刚开始先初始化,我们习惯将先同时将队头Rear和队尾Front指向数组最高端位置。

0

1

2

3

4

Rear

Front

插入第一个元素:

首先,计算(q->rear+1)%5,结果为(4+1)%5=0

然后,将该结果赋值给rear,即q->rear=0

最终,第一个元素将被插入到位置0。

1

2

3

4

0

0

Front

 rear

插入第二个元素:

此时,rear的值已经更新为上一次插入后的位置,即rear=0.

再次计算(q->rear+1)%5,结果为(0+1)%5=1.

将该结果赋值给rear,即q->rear=1.

第二个元素将被插入到位置1。                       

2

3

4

0

1

0

1

Front

rear

插入第三个元素:

当前rear的值是上一次插入后的位置,即rear=1.

计算(q->rear+1)%5,结果为(1+1)%5=2.

赋值给rear,即q->rear=2

第三个元素将被插入到位置2。

3

4

0

1

2

0

1

2

Front

rear

  插入第四个元素:

4

0

1

2

3

0

1

2

3

Front  

rear

能插入第五个吗??

哈哈当然不能ᕕ( ᐛ )ᕗ咬到尾巴了,尾巴rear再次移到下一位int[4]时,碰到头了front。

4

0

1

2

3

4

0

1

2

3

Rear

Front

此时结束尾插操作,大功告成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值