PTA习题3.12 另类循环队列
来源:互联网 发布:钩针设计软件 编辑:程序博客网 时间:2024/05/22 17:25
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
函数接口定义:
bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );
其中Queue
结构定义如下:
typedef int Position;typedef struct QNode *PtrToQNode;struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front; /* 队列的头指针 */ int Count; /* 队列中元素个数 */ int MaxSize; /* 队列最大容量 */};typedef PtrToQNode Queue;
注意:如果队列已满,AddQ
函数必须输出“Queue Full”并且返回false;如果队列是空的,则DeleteQ
函数必须输出“Queue Empty”,并且返回ERROR。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>#define ERROR -1typedef int ElementType;typedef enum { addq, delq, end } Operation;typedef enum { false, true } bool;typedef int Position;typedef struct QNode *PtrToQNode;struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front; /* 队列的头、尾指针 */ int Count; /* 队列中元素个数 */ int MaxSize; /* 队列最大容量 */};typedef PtrToQNode Queue; Queue CreateQueue( int MaxSize ){ Queue Q = (Queue)malloc(sizeof(struct QNode)); Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType)); Q->Front = 0; Q->Count = 0; Q->MaxSize = MaxSize; return Q;}bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );Operation GetOp(); /* 裁判实现,细节不表 */int main(){ ElementType X; Queue Q; int N, done = 0; scanf("%d", &N); Q = CreateQueue(N); while ( !done ) { switch( GetOp() ) { case addq: scanf("%d", &X); AddQ(Q, X); break; case delq: X = DeleteQ(Q); if ( X!=ERROR ) printf("%d is out\n", X); break; case end: while (Q->Count) printf("%d ", DeleteQ(Q)); done = 1; break; } } return 0;}/* 你的代码将被嵌在这里 */
输入样例:
4DelAdd 5Add 4Add 3DelDelAdd 2Add 1Add 0Add 10End
输出样例:
Queue Empty5 is out4 is outQueue Full3 2 1 0
bool AddQ( Queue Q, ElementType X )
{
if(Q->Count>=Q->MaxSize){
printf("Queue Full\n");
return false;
}
Q->Count++;
Q->Data[(Q->Front+Q->Count-1)%(Q->MaxSize)]=X; //关键在这一步
return true;
}
ElementType DeleteQ( Queue Q )
{
ElementType Data;
if(Q->Count<=0){
printf("Queue Empty\n");
return ERROR;
}
Q->Count--;
Data=Q->Data[Q->Front];
Q->Front=(Q->Front+1)%(Q->MaxSize);
return Data;
}
阅读全文
0 0
- PTA习题3.12 另类循环队列
- 习题3.12 另类循环队列
- 6-7 另类循环队列(20 分)
- PTA Windows消息队列
- pta中习题2_6
- PTA习题 树的同构
- C++习题——循环队列(顺序存储)
- sql 另类循环
- 另类循环队列---未实现题目要求,实现了双指针(Front、Rear)
- PTA-银行业务队列简单模拟
- PTA 数组循环左移
- PTA 循环单链表区间删除
- 二叉搜索树的习题 pta
- PTA习题 5-26 单词长度
- Lua 中的另类For循环
- 2014秋C++ 另类习题课
- PTA 7-3 银行业务队列简单模拟
- PTA 7-7 Windows消息队列
- 论组件enable属性的妙处——unity
- replicated mode vs global mode
- 二叉树- 数学加速运算
- 卷积和内积
- Mac下SSH免密登录localhost
- PTA习题3.12 另类循环队列
- ISCSI实现磁盘网络共享以及LVM方式共享拓展
- JavaScript中splice的用法
- CDHManager
- Eclipse添加tomcat8服务
- 《七点三刻》033期 13日举行南京大屠杀国家公祭仪式/欧冠16强抽签出炉…
- 《七点三刻》034期 国家公祭日/空军绕岛巡航/贾跃亭入老赖名单…
- Sublime Text 3 Cocos2d-x API提示
- 【bzoj 1007】水平可见直线(凸包)