另类循环队列---未实现题目要求,实现了双指针(Front、Rear)
来源:互联网 发布:vlan网络协议报告 编辑:程序博客网 时间:2024/05/22 13:28
习题3.12 另类循环队列 (20分)
如果用一个循环数组表示队列,并且只设队列头指针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
#include<stdio.h>#include<stdlib.h>#include<string.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;Position Rear;int Count;int MaxSize;};typedef PtrToQNode Queue;Queue CreateQueue(int Maxsize){int i=0;Queue Q = (Queue)malloc(sizeof(struct QNode));Q->Data = (ElementType*)malloc(Maxsize*sizeof(ElementType));Q->Front=0;Q->Rear=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);//printf("addq %d\n", 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));printf("\n");done = 1;break;}}return 0;}bool AddQ(Queue Q, ElementType X){if((Q->Rear+1)%Q->MaxSize==Q->Front){printf("Queue Full\n");return false;}Q->Data[Q->Rear]=X;Q->Rear = (Q->Rear+1)%Q->MaxSize;Q->Count++;return true;}ElementType DeleteQ(Queue Q){ElementType data;if(Q->Count==0){printf("Queue Empty\n");return ERROR;}data = Q->Data[Q->Front];Q->Front = (Q->Front+1)%Q->MaxSize;Q->Count--;return data;}Operation GetOp(){char a[5]; scanf("%s",a); if(strcmp(a,"Add")==0) return addq; else if(strcmp(a,"Del")==0) return delq; else if(strcmp(a,"End")==0) return end;elsereturn -1;}
阅读全文
0 0
- 另类循环队列---未实现题目要求,实现了双指针(Front、Rear)
- 【数据结构】循环队列的front,rear指针以及队列满的条件、计算队列长度
- 增加了front和rear后的顺序队列
- 第7周项目实践2.1 用只有尾节点指针rear的循环单链表实现队列算法库
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- 设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为()
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
- 循环队列rear==front 无法判断 空 还是满 问题解决
- 设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有元素个数为?
- rear和length表示的循环队列
- 循环队列(java实现)
- C#实现循环顺序队列(队列)
- 队列的数组实现(循环队列)
- java队列实现(顺序队列、链式队列、循环队列)
- java队列实现(顺序队列、链式队列、循环队列)
- 编写队列 初始化时发现 rear, front指向末尾的好处 <Java>
- 队列----循环数组实现队列
- 队列----循环队列的实现
- 一些指令
- JavaWeb学习总结——使用JDBC处理Oracle大数据
- Hi3518ev200 mt7601wifi驱动笔记
- iOS远程推送
- WebLogic11g-单双向SSL配置(转载)
- 另类循环队列---未实现题目要求,实现了双指针(Front、Rear)
- js实现返回页面顶部
- linux-4-文件与目录管理
- jquery插件select2源码解读(一) 概述
- 在Ubuntu17.04上安装QT5.9.0(下载、安装、问题解决)
- 下班前的一点思考
- 什么是奇偶校验
- 关于JM8.6中MAX_LIST_SIZE值的选取
- 蓝牙核心技术概述(一):蓝牙概述