pta6-15(双端循环队列)

题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101313244863737856

题意:实现双段队列的队首出队、入队以及队尾出队、入队4个操作

思路:

根据裁判测试程序我们可以发现,在CreateDeque函数中将MaxSize加了1,而且这里的MaxSize定义的是最大容量,所以这是一个循环队列,且为了避免Front=Rear时会出现表示队空和队满2种情况的二义性,需要将Rear表示队尾的下一个元素,这样就需要牺牲一个存储单元,所以在CreateDeque函数中就相应的将MaxSize加了1。知道了这些就可以写出代码了。

AC代码:

 1 bool Push( ElementType X, Deque D ){
 2     if((D->Rear+1)%D->MaxSize==D->Front)
 3         return false;
 4     D->Front=(D->MaxSize+D->Front-1)%D->MaxSize;
 5     D->Data[D->Front]=X;
 6     return true;
 7 }
 8 
 9 ElementType Pop( Deque D ){
10     if(D->Front==D->Rear) 
11         return ERROR;
12     int res=D->Data[D->Front];
13     D->Front=(D->Front+1)%D->MaxSize;
14     return res;
15 }
16 
17 bool Inject( ElementType X, Deque D ){
18     if((D->Rear+1)%D->MaxSize==D->Front)
19         return false;
20     D->Data[D->Rear]=X;
21     D->Rear=(D->Rear+1)%D->MaxSize;
22     return true;
23 }
24 
25 ElementType Eject( Deque D ){
26     if(D->Front==D->Rear)     
27         return ERROR;
28     D->Rear=(D->MaxSize+D->Rear-1)%D->MaxSize;
29     int res=D->Data[D->Rear];
30     return res;
31 }

 

转载于:https://www.cnblogs.com/FrankChen831X/p/10485958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值