包含min函数的栈 python,栈是实现函数调用所必需的数据结构

  包含min函数的栈 python,栈是实现函数调用所必需的数据结构

  题目:

  定义堆栈的数据结构。请在此类型中实现一个min函数,该函数可以获取堆栈的最小元素。在这个栈中,调用min、push和pop的时间复杂度为O(1)。

  思路:

  要使时间复杂度为O(1),每有一个新元素被推入栈中,栈中的所有元素都要排序,最小的元素要在栈顶。但是这种想法并不能保证最后推入堆栈的元素会先被释放,因为这个数据结构已经不是堆栈了。

  所以使用一个辅助成员变量来存储最小的元素。每次一个新元素被压入堆栈,如果元素小于当前最小的元素,最小的元素将被更新。但是,如果当前较小的元素被从堆栈中弹出,如何获得下一个最小的元素是一个问题。分析到这里,我们发现仅仅添加一个成员变量来存储最小元素是不够的,也就是说,当最小元素被弹出堆栈时,我们希望得到下一个最小元素。所以在压入最小的元素之前,我们必须保存第二小的元素。因此,最小的元素每次都可以由一个辅助堆栈保存。

  例子佐证:

  代码实现:

  公共类Main { stack integer data=new stack integer();//Stack Integer Min=用于存储元素的新堆栈Integer();//辅助堆栈。每次在数据堆栈中输入元素时,最小辅助堆栈都会存储当前数据堆栈中的最小元素。//数据栈和min栈的入口元素是public void stackwithminpush(int item){ data . push(item);if(min . size()==0 item min . peek()){ min . push(item);} else { min . push(min . peek());} }//弹出数据栈和min栈的元素,public void stackwithminpop(){ if(data . size()0min . size()0){ data . pop();min . pop();} }//数据栈的顶层元素,public int stackwithdatatop(){ if(data . size()0){ return data . peek();}返回0;}//min栈顶元素,是数据栈中现有元素的最小元素,public int stackwithminimin(){ if(data . size()0min . size()0){ return min . peek();}返回0;}}笑点低的帅哥:

  如果变成包含max函数的栈呢?其实道理都一样,只不过一个是最小的,一个是最大的。

  代码实现:

  公共类Main { stack integer data=new stack integer();//栈整数Max=新栈整数();//辅助堆栈。每次在数据栈中输入一个元素,min辅助栈存储当前数据栈中最大的元素,public void stackwithmaxpush(int item){ data . push(item);if(max . size()==0 item max . peek()){ max . push(item);} else { max . push(max . peek());} } public void stackWithMaxPop(){ if(max . size()0 data . size()0){ data . pop();max . pop();} } public int stackWithDataTop(){ if(data . size()0){ return data . peek();}返回0;} public int stackWithMaxMax(){ if(data . size()0 max . size()0){ return max . peek();}返回0;}}小结:

  考察对stack的理解。当面对抽象的问题时,我们有时可以举一些例子来使问题具体化。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: