设为首页收藏本站算法-循环双端队列(1)
繁体中文

单小喏中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

单小喏中文网欢迎你的光临!!!
查看: 1648818|回复: 0

算法-循环双端队列(1)

[复制链接]

85

主题

89

帖子

1246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1246

来自- 安徽合肥

扫一扫,手机访问本帖
发表于 2015-4-1 19:19:46 | 显示全部楼层 |阅读模式
打开Visual Studio

第一步 点击菜单[文件]->[新建]->[项目]新建一个项目:第二步 创建一个Win32控制台应用程序:

第三步 点击下一步

第四步 在附加选项中勾选空项目,点击完成。

第五步生成了一个空的项目文件

第六步在右侧“解决方案资源管理器”窗口中,“源文件”目录下点击右键,点击“添加”->“新建项”。

第七步添加一个C++文件,修改名称为“循环双端队列.cpp”,点击添加。

第八步  写代码
[C++] 纯文本查看 复制代码
//循环双端队列顺序表示 
#include <iostream>
#include <iomanip>
#include <assert.h>

using namespace std;
template <class T> class DoubleQueue
{
int end1, end2;//end1和end2为端点
T *data;
int size;
public:
DoubleQueue(int sz = 10);
~DoubleQueue(){ delete[] data; }
void Enqueue(T item, int end);
void Dequeue(int end);
int IsEmpty(){ return end1 == end2; }
int IsFull(){ return (end1 + 1) % size == end2; }
void list(int end);
};
//循环双端队列操作
template <class T>
DoubleQueue <T>::DoubleQueue(int sz) :
end1(0), end2(0), size(sz){
data = new T[size]; assert(data != 0);
}
//循环双端队列插入新元素操作
template <class T>
void DoubleQueue <T>::Enqueue(T item, int end)
{
assert(!IsFull());
if (end == 1){
  end1 = (end1 + 1) % size;
  data[end1] = item;
}
else{
  data[end2] = item;
  end2 = (end2 - 1 + size) % size;
}
}
// 循环双端队列删除操作
template <class T>
void DoubleQueue <T>::Dequeue(int end)
{
assert(!IsEmpty());
if (end == 1){
  end1 = (end1 + size - 1) % size;
}
else{
  end2 = (end2 + 1) % size;
}
}
// 循环双端队列输出操作
template <class T>
void DoubleQueue <T>::list(int end)
{
if (end == 1){
  for (T p = (end2 + 1) % size; p <= end1; p = (p + 1) % size)
   cout << setw(3) << data[p];
  cout << endl;
}
else{
  for (T p = end1; p != end2; p = (p + size - 1) % size)
   cout << setw(3) << data[p];
  cout << endl;
}
}
//循环双端队列的测试
void main()
{
DoubleQueue <int> Q;
cout << "运行结果:\n";
//向队列end1插入4,5,6,7,8 三个元素
Q.Enqueue(4, 1);
Q.Enqueue(5, 1);
Q.Enqueue(6, 1);
Q.Enqueue(7, 1);
Q.Enqueue(8, 1);
cout << "输出向队列end1插入4,5,6,7,8三个元素后情况:\n";
Q.list(1);
// 删除最后插入的2个元素
Q.Dequeue(1);
Q.Dequeue(1);
cout << "输出删除最后2个元素后的队列end1的情况:\n";
Q.list(1);
//向队列end2插入7,8,9,10,11 三个元素
Q.Enqueue(7, 2);
Q.Enqueue(8, 2);
Q.Enqueue(9, 2);
Q.Enqueue(10, 2);
Q.Enqueue(11, 2);
cout << "输出向队列end2插入7,8,9,10,11三个元素后情况:\n";
Q.list(2);
cin.get();
}


算法-循环双端队列(1)

算法-循环双端队列(1)


源码下载:算法-循环双端队列(1)













上一篇:C语言基础-第一个程序(HelloWorld)
下一篇:Android Studio 开发环境

帖子地址: 



+1
1648818°C
沙发哦 ^ ^ 马上
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
发评论,即可赢取积分欧!

申请友链|意见反馈|小黑屋|手机版|Archiver|单小喏中文网 ( 皖ICP备13012632号-1 |网站地图  

GMT+8, 2016-12-8 17:55 , Processed in 0.262872 second(s), 49 queries .

Powered by danxiaonuo

© 2013-2016 danxiaonuo.

快速回复 返回顶部 返回列表