堆栈

1028 Web Navigation

↘锁芯ラ 提交于 2019-11-29 12:42:58
描述 标准Web浏览器包含在最近访问过的页面之间前后移动的功能。实现这些功能的一种方法是使用两个堆栈来跟踪可以通过前后移动到达的页面。在此问题中,系统会要求您实现此功能。 需要支持以下命令: BACK:将当前页面推到前向堆栈的顶部。从后向堆栈的顶部弹出页面,使其成为新的当前页面。如果后向堆栈为空,则忽略该命令。 FORWARD:将当前页面推到后向堆栈的顶部。从前向堆栈的顶部弹出页面,使其成为新的当前页面。如果前向堆栈为空,则忽略该命令。 访问:将当前页面推到后向堆栈的顶部,并将URL指定为新的当前页面。清空前向堆栈。 退出:退出浏览器。 假设浏览器最初在URL http://www.acm.org/上加载网页 输入 输入是一系列命令。命令关键字BACK,FORWARD,VISIT和QUIT都是大写的。 URL没有空格,最多包含70个字符。您可以假设任何问题实例在任何时候都不需要每个堆栈中超过100个元素。输入结束由QUIT命令指示。 输出 对于除QUIT之外的每个命令,如果不忽略该命令,则在执行命令后打印当前页面的URL。否则,打印“忽略”。每个命令的输出应该在它自己的行上打印。没有为QUIT命令生成输出。 样例输入 VISIT http://acm.ashland.edu/ VISIT http://acm.baylor.edu/acmicpc/ BACK BACK BACK

C++实现堆栈数据结构(使用vector容器)

馋奶兔 提交于 2019-11-29 08:28:42
本文使用vector容器构建了一个堆栈数据结构,本程序由三个文件构成, Stack_Vectors.hpp 定义了这个类, Stack_Vectors.cpp 中构建了各成员函数。 main.cpp 测试了该程序。本程序使用Xcode编译,其中,头文件源码如下: // // Stack_Vectors.hpp // 堆栈(vector) // // Created by lq on 2019/9/9. // Copyright © 2019 Mr.liang. All rights reserved. // #ifndef Stack_Vectors_hpp #define Stack_Vectors_hpp #include <vector> class stack_vectors { private: std::vector<int> array; int stack_size; public: stack_vectors(); ~stack_vectors(); stack_vectors(const stack_vectors &s); bool empty_check() const; int getsize() const; void clearstack(); void show() const; int & top(); void pop(); void push

8道经典JavaScript面试题

て烟熏妆下的殇ゞ 提交于 2019-11-29 06:40:00
JavaScript是前端开发中非常重要的一门语言,浏览器是他主要运行的地方。JavaScript是一个非常有意思的语言,但是他有很多一些概念,大家经常都会忽略。比如说,原型,闭包,原型链,事件循环等等这些概念,很多JS开发人员都研究不多。 所以今天,就来和大家看看下面几个问题,大家可以先思考一下,尝试作答。 八道面试题 问题1:下面这段代码,浏览器控制台上会打印什么? 问题2:如果我们使用 let 或 const 代替 var,输出是否相同 问题3:“newArray”中有哪些元素? 问题4:如果我们在浏览器控制台中运行'foo'函数,是否会导致堆栈溢出错误? 问题5: 如果在控制台中运行以下函数,页面(选项卡) 是否会有响应 问题6: 我们能否以某种方式为下面的语句使用展开运算而不导致类型错误 问题7:运行以下代码片段时,控制台上会打印什么? 问题8:xGetter() 会打印什么值? 答案 前面的问题我们都举例出来了,接下来我们会从头到尾,一个个来分析我们这些问题的答案,给大家一些学习的思路 问题1: 使用var关键字声明的变量在JavaScript中会被提升,并在内存中开辟空间,由于没有赋值,无法定义数值类型,所以分配默认值undefined。var声明的变量,真正的数值初始化,是发生在你确定赋值的位置。同时,我们要知道,var声明的变量是函数作用域的

堆(heap)和栈(stack)的区别

▼魔方 西西 提交于 2019-11-28 23:31:18
堆和栈的区别   一个由c/C++编译的程序占用的内存分为以下几个部分   1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。   2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。   3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。   4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 。   5、程序代码区—存放函数体的二进制代码。 数据结构   1、堆是二叉树,堆栈是线性表   堆通常用来排序即“堆排序   堆排序是指利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即父节点的键值或索引总是大于(大头堆)或者小于(小  头堆)任何一个子节点。通常升序建大头堆降序建小头堆,一般用数组表示。具体算法可参阅相关数据结构的书籍。   2、堆栈也是一种数据结构   线形表是具有n个元素的有限序列,而堆栈是限定仅在表尾进行插入或删除操作的线形表,因此,对堆栈来说表尾称为栈顶,相应的表头称为栈底

堆栈

南笙酒味 提交于 2019-11-28 22:30:38
目录 一、什么是堆栈 二、后缀表达式 三、堆栈的抽象数据类型描述 四、栈的顺序存储实现 4.1 入栈 4.2 出栈 五、例:请用一个数组实现两个堆栈,要求最大地利用数组空间,使数组只要有空间入栈操作就可以成功。 5.1 入栈 5.2 出栈 六、堆栈的链式存储实现 6.1 堆栈初始化 6.2 判断堆栈S是否为空 6.3 入栈 6.4 出栈 七、堆栈应用:表达式求值 八、中缀表达式求值 九、中缀表达式如何转换为后缀表达式 十、中缀转换为后缀实例 一、什么是堆栈 计算机如何进行 表达式求值? 例:算术表达式 \(5+6/2-3*4\) ,正确理解: \(5+6/2-3*4=5+3-3*4=8-3*4=8-12=-4\) 由两类对象构成的: 运算数, 如 \(2、3、4\) 运算符号, 如 \(+、-、*、/\) 不同运算符号优先级不一样 二、后缀表达式 中缀表达式: 运算符号位于两个运算数之间。如, \(a+b*c-d/e\) 后缀表达式: 运算符号位于两个运算数之间。如, \(abc*+de/-\) 例: \(62/3-42*+=?\) 后缀表达式求值策略: 从左向右“扫描”,诸葛处理欲奴三叔和运算符号 遇到运算数怎么办? 如何“记住”目前还不未参与运算的数? 遇到运算符号怎么办? 对应的运算数是什么? 启示: 需要有种存储方法,能顺序存储运算数,并在需要时“倒序”输出。 例: \

traceback说明

醉酒当歌 提交于 2019-11-28 19:49:05
一:traceback说明 该模块提供了一个标准接口来提取,格式化和打印Python程序的堆栈跟踪。它完全模仿Python解释器在打印堆栈跟踪时的行为。当您想要在程序控制下打印堆栈跟踪时,这很有用。 二:模块定义了以下功能: traceback.print_tb(tb [,limit [,file ] ] ) 打印以限制回溯对象tb的堆栈跟踪条目。如果 省略限制或者None打印所有条目。如果文件被省略或者None输出到了sys.stderr; 否则它应该是一个打开的文件或文件类对象来接收输出。 traceback.print_exception(etype,value,tb [,limit [,file ] ] ) 打印异常信息,并将traceback tb中的堆栈跟踪条目限制为文件。这与以下方面有所不同:(1)如果tb不是,则打印一个标题; (2)在堆栈跟踪之后打印异常etype和值 ; (3)如果etype的值和值具有适当的格式,则会打印语法错误发生的行,并在其中指出错误的大概位置。print_tb()NoneTraceback (most recent call last):SyntaxError traceback.print_exc([ limit [,file ] ] ) 这是一个简写。(事实上​​,它用于以线程安全的方式检索相同的信息,而不是使用已弃用的变量。

thinkphp5远程代码执行漏洞分析(二)

℡╲_俬逩灬. 提交于 2019-11-28 19:01:23
payload url => http://127.0.0.1/thinkphp_5.0.10_full/public/index.php?s=index/index/index post => s=whoami&method=&filter[]=system&_method=__construct 版本:5.0.8~5.0.12 漏洞解析 开始前为了方便大家理解,先大致描述一下被触发的过程。原因在于Request.php文件中reqeust类的属性可控导致自定义filter过滤器可控,而filter又用于过滤用户传入的危害变量,可控的变量被传入了可控的filter中导致漏洞的形成。 从漏洞形成的地方反向跟踪payload的传入过程研究漏洞形成的原因: 首先在request.php的1060行下断点 分析堆栈 可以发现有危害的filter在request.php的1000行的getFilter方法中形成 跟踪进getFilter()方法,过滤器直接由request类的属性filter赋值了 那么$this->filter的属性是什么时候被我们改变的呢,继续在堆栈间查看变量的改变,可以发现属性在App::run()方法调用后和$request->param()方法调用前就已经被改变了。 继续在这两个方法之间一步步的调试,查看filter属性在何处被修改,最后定位到了Route

递归转迭代实操记录

跟風遠走 提交于 2019-11-28 15:24:11
针对那些经典的像素游戏设计的自动切图工具里用到种子填充算法的实现。 一开始是用递归实现的,后来遇到一些头像之类的比较大一点的图素,运行的时候经常占满C#默认的1M线程栈内存而崩溃。尝试使用各种多线方式改造并没有成功,于是干脆改成迭代形式,创建一个Stack自己完全精确控制其中的数据操作。 这里截取一段改成迭代后的代码,这是窗体的事件处理用cs代码。因为只是个小工具,没有完全把界面和逻辑分离。 //堆栈最大深度 private const int MaxStackFrames = 640 * 480; private Stack<FillStackFrame> mStack = new Stack<FillStackFrame>(MaxStackFrames); private void fillRegion(int x, int y) { //防止多线程操作堆栈引起的问题 lock (this) { //从UI初始化本次调用不会变的参数 int distance = Convert.ToInt32(txtDistance.Text); //复位堆栈并且压入初始数据 mStack.Clear(); var frame = new FillStackFrame(); frame.x = x; frame.y = y; mStack.Push(frame); /

吃人的那些 Java 名词:对象、引用、堆、栈

旧巷老猫 提交于 2019-11-28 14:41:44
作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着: 对象、引用、堆、栈、堆栈 (栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐约约觉得自己在被一只无形的大口慢慢地吞噬,只剩下满地的衣服碎屑(为什么不是骨头,因为骨头也好吃)。 记得中学的课本上,有一篇名为《狂人日记》课文;那时候根本理解不了鲁迅写这篇文章要表达的中心思想,只觉得满篇的“ 吃人 ”令人心情压抑;老师在讲台上慷慨激昂的讲,大多数的同学同我一样,在课本面前“痴痴”的发呆。 十几年后,再读《狂人日记》,恍然如梦: 鲁迅先生以狂人的口吻,再现了动乱时期下中国人的精神状态,视角新颖,文笔细腻又不乏辛辣之味。 当时的中国,混乱成了主色调。以清廷和孔教为主的封建旧思想还在潜移默化地影响着人们的思想,与此同时以革命和新思潮为主的现代思想已经开始了对大众灵魂的洗涤和冲击。 最近,和沉默王二技术交流群(120926808)的群友们交流后,Java 中那四五个会吃人的名词:对象、引用、堆、栈、堆栈,似乎在脑海中也清晰了起来,尽管疑惑有时候仍然会在阴云密布时跑出来——正鉴于此,这篇文章恰好做一下归纳。 一、对象和引用 在 Java 中,尽管一切都可以看做是对象,但计算机操作的并非对象本身,而是对象的引用。 这话乍眼一看,似懂非懂。究竟什么是 对象

new/delete 和 malloc/free有什么区别和联系

穿精又带淫゛_ 提交于 2019-11-28 12:53:38
区别: 1. new/delete是 C++的操作符,malloc/free是C/C++标准库函数 。 2. new分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后再回收堆内存。malloc只会根据参数分配内存,默认返回指向void*的指针,同样free释放malloc分配的内存。 3.malloc/free是 new/delete的一个子集。 共同点: 1. 都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就对应一个delete/free,而是指在作用域内,new/malloc所申请的内存,必须被有效释放,否则将会导致内存泄露。 2. 都是申请内存,释放内存。 示例: //pM指针指向sizeof(int)*100大小的内存块 int* pM = (int *)malloc(sizeof(int)*100); if (pM) { free(pM); pM = NULL; } //pN创建100个int对象 int* pN = new int[100]; if (pN) { delete []pN; pN = NULL; } 来源: oschina 链接: https://my.oschina.net/u/70773/blog/295907