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 }

 

上一篇:一个Java例子,解释清楚注解的作用


下一篇:pta6-17(另类堆栈)