没有合适的资源?快使用搜索试试~ 我知道了~
所谓双端队列(double-ended queue,deque),就是在列表的两端都可以插入和删除数据。 因此它允许的操作有Create、IsEmpty、IsFull、Left、Right、AddLeft、AddRight、DeleteLeft、 DeleteRight。使用循环数组方式实现双端队列,要求实现上述操作,并实现一个Print输出操作, 能将队列由左至右的次序输出于一行,元素间用空格间隔。队列元素类型设为整型。
资源推荐
资源详情
资源评论
/*所谓双端队列(double-ended queue,deque),就是在列表的两端都可以插入和删除数据。
因此它允许的操作有Create、IsEmpty、IsFull、Left、Right、AddLeft、AddRight、DeleteLeft、
DeleteRight。使用循环数组方式实现双端队列,要求实现上述操作,并实现一个Print输出操作,
能将队列由左至右的次序输出于一行,元素间用空格间隔。队列元素类型设为整型。
输入:input.txt,给出一个操作序列,可能是Create、Print之外的任何操作,需要的情况下,会给出参数。
最后以关键字"End"结束,例如:
AddLeft 1
AddLeft 2
DeleteRight
IsFull
DeleteLeft
IsEmpty
AddRight 3
AddLeft 2
AddRight 1
End
输出:程序开始执行时,队列设置为空,按输入顺序执行操作,每个操作执行完后,将结果输出于一行。
对于错误命令,输出"WRONG"。对IsEmpty和IsFull命令,试情况输出"Yes"或"No"。
对Left和Right命令,若队列空,输出"EMPTY",否则输出对应队列元素。
对Add命令,若队列满,输出"FULL",否则调用Print,输出队列所有元素。
对Del命令,若队列空,输出"EMPTY",否则输出所有元素。
元素间用空格间隔,最后一个元素后不能有空格。最后输出一个回车。*/
#include<fstream.h>
#include<iostream.h>
#include<string.h>
#include<math.h>
因此它允许的操作有Create、IsEmpty、IsFull、Left、Right、AddLeft、AddRight、DeleteLeft、
DeleteRight。使用循环数组方式实现双端队列,要求实现上述操作,并实现一个Print输出操作,
能将队列由左至右的次序输出于一行,元素间用空格间隔。队列元素类型设为整型。
输入:input.txt,给出一个操作序列,可能是Create、Print之外的任何操作,需要的情况下,会给出参数。
最后以关键字"End"结束,例如:
AddLeft 1
AddLeft 2
DeleteRight
IsFull
DeleteLeft
IsEmpty
AddRight 3
AddLeft 2
AddRight 1
End
输出:程序开始执行时,队列设置为空,按输入顺序执行操作,每个操作执行完后,将结果输出于一行。
对于错误命令,输出"WRONG"。对IsEmpty和IsFull命令,试情况输出"Yes"或"No"。
对Left和Right命令,若队列空,输出"EMPTY",否则输出对应队列元素。
对Add命令,若队列满,输出"FULL",否则调用Print,输出队列所有元素。
对Del命令,若队列空,输出"EMPTY",否则输出所有元素。
元素间用空格间隔,最后一个元素后不能有空格。最后输出一个回车。*/
#include<fstream.h>
#include<iostream.h>
#include<string.h>
#include<math.h>
//公式化类queue
template<class T>
class Queue
{
public:
Queue(int MaxQueueSize=10);
~Queue() {delete []queue;}
bool IsFull() const{return (((rear+1)%MaxSize==front)?1:0);} //判断队列是否满
bool IsEmpty() const{return front==rear;} //判断队列是否为空
Queue<T>& AddRight(const T&x); //向队列末尾添加元素
Queue<T>& AddLeft(const T&x); //向队列首端添加元素
Queue<T>& DeleteLeft(); //删除队列首端的元素
Queue<T>& DeleteRight(); //删除队列末尾的元素
T first() const {return queue[front];}//将队列首端的元素返回
T Last() const {return queue[rear];} //将队列末尾的元素返回
void print(); //将队列中的元素全部显示出来
private:
int front; //与第一个元素在反方向上相差为1
int rear; //指向最后一个元素
int MaxSize; //队列数组的大小
T* queue; //存储队列元素的数组
};
template<class T>
Queue<T>::Queue(int MaxQueueSize) //构造函数
{
MaxSize=MaxQueueSize;
front=rear=0;
queue=new T[MaxSize];
}
template<class T>
class Queue
{
public:
Queue(int MaxQueueSize=10);
~Queue() {delete []queue;}
bool IsFull() const{return (((rear+1)%MaxSize==front)?1:0);} //判断队列是否满
bool IsEmpty() const{return front==rear;} //判断队列是否为空
Queue<T>& AddRight(const T&x); //向队列末尾添加元素
Queue<T>& AddLeft(const T&x); //向队列首端添加元素
Queue<T>& DeleteLeft(); //删除队列首端的元素
Queue<T>& DeleteRight(); //删除队列末尾的元素
T first() const {return queue[front];}//将队列首端的元素返回
T Last() const {return queue[rear];} //将队列末尾的元素返回
void print(); //将队列中的元素全部显示出来
private:
int front; //与第一个元素在反方向上相差为1
int rear; //指向最后一个元素
int MaxSize; //队列数组的大小
T* queue; //存储队列元素的数组
};
template<class T>
Queue<T>::Queue(int MaxQueueSize) //构造函数
{
MaxSize=MaxQueueSize;
front=rear=0;
queue=new T[MaxSize];
}
剩余6页未读,继续阅读
资源评论
lele12138
- 粉丝: 5
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功