首先自己用 节点 实现了 栈 这种数据类型

为了实现题目了要求,我使用的两个栈。

一个栈 用来 push pop 用户的数据, 另外一个栈用来存放 最小元素(涉及元素比较)

代码如下:

 #!/usr/bin/env python3

 class Node(object):
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_ class LStack(object):
def __init__(self):
self.top = None def is_empty(self):
return self.top is None def push(self, elem):
self.top = Node(elem, self.top) def pop(self):
if self.is_empty():
raise ValueError("Stack is Empty")
e = self.top.elem
self.top = self.top.next
return e def peek(self):
if self.is_empty():
raise ValueError("Stack is Empty")
return self.top.elem class Stack_Find_Min(object):
def __init__(self):
self.s1 = LStack()
self.s2 = LStack()
self.minvalue = 0 def is_empty(self):
return self.s1.is_empty() def push(self, elem):
self.s1.push(elem)
if self.s2.is_empty():
self.s2.push(elem)
self.minvalue = elem
elif elem < self.minvalue:
self.s2.push(elem)
self.minvalue = elem def pop(self):
if self.s1.is_empty():
raise ValueError("Stack is Empty")
e = self.s1.pop()
if e == self.minvalue:
self.s2.pop()
self.minvalue = self.s2.peek()
return e def peek(self):
return self.s1.peek() def minx(self):
return self.s2.peek() if __name__=="__main__":
sm = Stack_Find_Min()
for i in [3,2,7,9,4,6,8,1]:
sm.push(i)
print("minx:",sm.minx())
print("pop:",sm.pop())
print("minx:",sm.minx())

编程题目 定义栈的数据类型,请在类型中实现一个能够得到栈最小元素的minx函数。的更多相关文章

  1. 《剑指Offer》第20题(Java实现):定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    一.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 二.思路解析 首先定义一个Integer类型的栈,记为stack,此栈用来完成数据 ...

  2. 剑指offer20:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    1 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 2. 思路和方法 利用辅助栈来存储现有栈的最小值.在入栈和出栈的时候将现有栈和最小 ...

  3. 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  4. 实现栈最小元素的min函数

    #include<iostream> #include<stack> using namespace std; class min_stack { public: void p ...

  5. 自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)

    基本思想: // 借助一个辅助栈,入栈时,若新元素比辅助栈栈顶元素小,则直接放入辅助站 // 反之,辅助站中放入次小元素(即辅助栈栈顶元素)====保证最小元素出栈时,次小元素被保存 static c ...

  6. 请让页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动

    <!DOCTYPE html> <html> <head> <title>Making things move</title> <me ...

  7. java基础编程——获取栈中的最小元素

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   题目代码 /** * Created by YuKai Fan on 2018/9 ...

  8. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

  9. js之数据类型(对象类型——构造器对象——函数1)

    函数它只定义一次,但可能被多次的执行和调用.JavaScript函数是参数化的,函数的定义会包括形参和实参.形参相当于函数中定义的变量,实参是在运行函数调用时传入的参数. 一.函数定义 函数使用fun ...

随机推荐

  1. 图书商城(基于Jsp+Servlet)

    这个项目主要是加深一下对于servlet和jsp知识相关的了解以及简单业务逻辑的处理. 用户更新的逻辑: 1.点击修改用户的那一行可以获取到用户的id 2.跳转到一个servlet,去查询该用户的基本 ...

  2. 1123. Lowest Common Ancestor of Deepest Leaves

    link to problem Description: Given a rooted binary tree, return the lowest common ancestor of its de ...

  3. 第九届蓝桥杯B组决赛 调手表(完全背包)

    问题描述 M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 .如果当前的数是 ...

  4. Django--redis 保存session

    pipenv install django-redis settings.py: # 作为 cache backend 使用配置 使用redis保存session CACHES = { "d ...

  5. 【转】Docker学习_本地/容器文件互传(5)

    将容器内文件拷贝到宿主机 docker cp <containerId>:/导出文件的位置/xxx.sql /宿主机的位置 示例:docker cp bf4c4fff338c:/root/ ...

  6. 方法重载(Overload)

    方法重载(Overload):多个方法名称一样,但参数列表不一样. (一个方法名称,实现类似的多个功能) 方法重载与下列因素有关: 1. 参数个数不同 public static int sum(in ...

  7. Java 常用转换

    日期转换 SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = ft.par ...

  8. task20160125

    http://task.zbj.com/2034844/n15o1.html 百度开放平台--首页>帮助文档首页>Frontia>Android开发指南>个人数据存储 http ...

  9. 使用mvn deploy命令将本地jar包上传到maven私服

    记录一下,以后少走弯路 前提:已经搭建好nexus maven私服,地址192.168.110.240:9091 在maven的setting.xml中找到<mirrors></mi ...

  10. 【pwnable.kr】 asm

    一道写shellcode的题目, #include <stdio.h> #include <string.h> #include <stdlib.h> #inclu ...