queue for max elem, pop, push
queue for max elem, pop, push
个人信息:就读于燕大本科软件project专业 眼下大三;
本人博客:google搜索“cqs_2012”就可以;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
博客内容:queue for max elem, pop, push;
博客时间:2014-4-28;
编程语言:C++ ;
编程坏境:Windows 7 专业版 x64;
编程工具:vs2008 32位编译器;
制图工具:office 2010 ppt;
硬件信息:7G-3 笔记本;
my words
Don't let shorts beat you, because it doesn't worth.
problem
make a queue for max elem, pop and push.(problem from beauty from programming)
require fast for getting max elem
my solution
two stacks can make true a queue.
sub-problem
getting max elem for the stack is so easy with dp.
my solution for my stack with max elem follows
name of type for elem is int
class Stack_mine
{
// assume: the data length is not so long, its length <= the max number of int
int * data ;
int length;
int * table; public: // constructor function
Stack_mine()
{
length = 0;
data = new int[LENGTH];
table = new int[LENGTH];
} // function: pop
int _pop()
{
if( ! _empty() )
{
length--;
return data[length];
}
else
{
cout<<"pop error"<<endl;
return -1;
}
} // function: return length
int _length( )
{
return length;
} // function: push
void _push(int a)
{
int * p1,*p2;
if(length >= LENGTH)
{
p1 = (int *)realloc(data,LONGLENGTH * sizeof(int));
p2 = (int *)realloc(table,LONGLENGTH * sizeof(int));
data = p1;
table = p2;
}
data[length] = a;
if( length == 0 || data[ table[length-1] ] < a )
table[length] = length;
else table[length] = table[length-1];
length ++;
} // function: empty
bool _empty()
{
if(length>0)
return false;
else return true;
} // function: max
int _max()
{
if(! _empty())
return data[ table[ length-1 ] ];
cout<<"error: empty stack for _max"<<endl;
return -1;
}
};ok, my solution for queue max elem follows
class Queue_mine
{
Stack_mine s1;
Stack_mine s2;
public:
Queue_mine(){}; // function: push
void _push(int a)
{
s1._push(a);
}; // function: pop
int _pop()
{
if(s2._empty())
{
while(!s1._empty())
{
s2._push(s1._pop());
}
}
return s2._pop();
} // function: length
int _length()
{
return s1._length() + s2._length();
} bool _empty()
{
if( s1._empty() && s2._empty() )
{
return true ;
}
else return false ;
} int _max()
{
if(! s1._empty() && ! s2._empty())
return ( s1._max() > s2._max() ? s1._max() : s2._max() );
else if( ! s1._empty() && s2._empty())
return s1._max();
else if( s1._empty() && ! s2._empty() )
return s2._max();
else {
cout<<"empty for queue"<<endl;
return -1;
}
} };
queue for max elem, pop, push的更多相关文章
- 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()
typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...
- js 数组的pop(),push(),shift(),unshift()方法小结
关于数组的一些操作方法小结: pop(),push(),shift(),unshift()四个方法都可改变数组的内容以及长度: 1.pop() :删除数组的最后一个元素,并返回被删除的这个元素的值: ...
- JS pop push unshift shift的作用与区别
白话JS中数组方法pop push unshift shift的作用与区别,通过本文,你大概能知道这四种数组方法的基本使用与大致区别. 首先,这四种方法会直接修改数组,请先记住这一点. 我们先把pop ...
- 自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)
基本思想: // 借助一个辅助栈,入栈时,若新元素比辅助栈栈顶元素小,则直接放入辅助站 // 反之,辅助站中放入次小元素(即辅助栈栈顶元素)====保证最小元素出栈时,次小元素被保存 static c ...
- JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()
一.Array 1.some()和every() some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true. every()是对数组中的每一项运行给定函数,如果该函数对 ...
- mongo 修改器 $inc/$set/$unset/$pop/$push/$pull/$addToSet
mongo $inc 可以对集合里面的某些值是数字的增减.看代码 $set 可以进行修改,并且不存在的时候默认添加. 同时还能该变数据的类型. 还可以该变内嵌元素的值 用.调用 $unset 删除 ...
- js array filter pop push shift unshift方法
JavaScript Array filter() 方法 JavaScript Array 对象 实例 返回数组 ages 中所有元素都大于 18 的元素: var ages = [32, 33, ...
- <h2>js数组操作大全(pop,push,unshift,splice,shift方法)</h2>
---恢复内容开始--- shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a ...
- 堆栈 pop push
1.什么是堆栈 1.1堆栈 堆栈可以看作程序的心脏 所有重要的数据都会在这个里面体现(比如运算一道算术题,虽然还没算出最终答案,但是你在算出最终结果前的一些过程值可以放进堆栈) 堆栈这块内存比较特殊, ...
随机推荐
- 关于Mantis变更日志(Changelog)和路线图(Roadmap)的说明
变更日志(Changelog):是已经修改好了问题的日志,需要给项目添加版本号,并且在添加/解决问题时都指定了相应的版本号,才会显示. 路线图(Roadmap):是计划在某个版本修改某些问题的日志,需 ...
- 在Windows上以服务方式运行 MSOPenTech/Redis
ServiceStack.Redis 使用教程里 提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的 Redi ...
- 常见C++内存池技术
原文:http://www.cppblog.com/weiym/archive/2013/04/08/199238.html 总结下常见的C++内存池,以备以后查询.应该说没有一个内存池适合所有的情况 ...
- [Todo] 乐观悲观锁,自旋互斥锁等等
乐观锁.悲观锁.要实践 http://chenzhou123520.iteye.com/blog/1860954 <mysql悲观锁总结和实践> http://chenzhou123520 ...
- thinkphp问题
这几天组里有个php系统报安全漏洞,负责的厂商跑了,没办法,被组长丢过来改漏洞,记录一下部分内容. 配置php的环境 参考https://blog.csdn.net/u011415782/artic ...
- 监听内容变化 TextWatcher @功能
监听多个TextView的内容变化 使用示例 TextWatcherUtils.addTextChangedListener(isAllNotEmpty -> btnLogin.setEnabl ...
- C#和Java交互相关研究
之前总觉得C#和Java可以交互应用,但是由于时间以及其他方面的原因,一直没有调研.今天抽空搜了一下,终于折腾出来了. 以下是我自己就C#和Java整合的一些提问和分析,如果有不对的地方,请路过的各位 ...
- EasyUI-EasyUI框架入门学习
前言 新项目的开发前端技术打算采用EasyUI框架(基于EasyUI较为丰富的UI组件库),项目组长将前端EasyUI这块的任务分配给了我.在进行开发之前,需要我这菜鸟对EasyUI框架进行一些基础的 ...
- windows下读取Linux分区软件
导读 ext3等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.etx4也是Linux下的日志型文件系统,被设计作为ext3的继任者.他消除了64位存储限制,是 ...
- 如何判断linux用户是否为root用户
看命令行提示符 ,如果是#,那就是root用户,如下图:[root@localhost /]# 如果是$,那就是普通用户,如下图:[test@localhost ~]$