简单队列的改进——————循环队列

16:28:59 1 front=near=0; 
 2 
 3 //在入队列时,应该先判断是否满队列
 4 //即下一个元素的地址和队列前端front是否相等 
 5 void addcq(int front,int *rear, element item )
 6 {
 7     *rear=(*rear+1)%MAX_QUEUE_SIZE;
 8     if(*rear==front){
 9         printf("队列满"); 
10     }
11     queue[*rear]=item;
12  } 
13  //因为front指向的是队头的前一个位置
14  //如:queue[0front 12345 6near]        其中123456存储着数据 
15  //出队列时,应该先判断front==rear
16  //然后在加1 
17  element deleteq(int *front ,int near)
18  {
19      
20      if(*front==rear){
21          printf("队列空");
22      }
23      *front=(*front+1)%MAX_QUEUE_SIZE;
24      return queue[*front];
25   } 
26  

 

用一维数组模拟成圆形数组

1.

最多只能存储MAX_QUEUE_SIZE --1 个元素

因为当存储MAX_QUEUE_SIZE时  front 也等于rear  ,这样就不知道是队列空还是队列满啦

2.

即当队列尾rear 指针走到队列最大值时,若front != near 则rear置为0..(通过对最大值取余进行转换)

这种队列 rear 和front被初始化为0 而不是-1;

front 始终指向队列头部的前一个位置,而rear 始终指向队列的尾部

 

转载于:https://www.cnblogs.com/hysz/p/7151235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值