最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--元素函数

1、义定栈的数据结构,求要添加一个min函数,够能失掉栈的小最元素。对于找最大值是实其一个理道,这里就不话废了。
求要:函数min、push、pop的时间复杂度都是o(1)
这里用一个帮助栈去动态的维护栈的小最值,所以pop的时候直接--top就够能了,而取小最值的时候取MinStack[top]就OK了。太单简了,没写成函数。

#include<stdio.h>
const int N = 30;
int stack1[N];
int top1;
int MinStack[N];
inline int min(const int a, const int b)
{return a < b ? a : b;
}
//有元素入栈的时候,维护MinStack数组
void Add(int *stack, int *MinStack, int &top, int v)
{if(top > -1){stack[++top] = v;MinStack[top] = min(MinStack[top - 1], v);}elsestack[top] = MinStack[++top] = v;
}
int main()
{int n,IsPush,i,v;while(scanf("%d", &n) != EOF){top1 = -1;for(i = 0; i < n; ++i){printf("入输操纵选项:\n0 除删栈顶元素 1 增长元素 其它 失掉小最值:");scanf("%d", &IsPush);if(IsPush == 1){printf("入输要添加的数:");scanf("%d", &v);Add(stack1, MinStack, top1, v);}else if(!IsPush){--top1;}else{if(top1 > -1){printf("栈中元素为:\n");for(int j = 0; j <= top1; ++j)printf("%d ", stack1[j]);printf("\n小最值为:%d\n", MinStack[top1]);}elseprintf("空栈\n");}}//end forprintf("over\n");}//end while
}
每日一理道
成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不需要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。

OK,其实这不是我想说的重点,因为这个太单简了。那我要说的重点是什么呢?如果说需要在O(1)的时间内获得队列的最大或者小最值呢?(哎呀,最大值一样的撒)那怎么破????好,等我写好代码以后再来充补吧!
OK,重点来了,详情请猛击博客:http://blog.csdn.net/kay_zhyu/article/details/8869641

文章结束给大家分享下程序员的一些笑话语录: 这个世界上只有10种人:懂得二进制的和不懂得二进制的。

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/30/3052201.html

元素函数编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值...相关推荐

  1. 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++

    前言 提示:本篇文章收录严蔚敏编写的数据结构C语言版本 简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别 代码参考严蔚敏编写的<数据结构>,二维码动态演示可扫码可观看. - ...

  2. 【栈与队列】剑指offer:两个栈模拟队列

    栈:先进后出 队列:先进先出 所以,只要分3种情况写即可 class Solution { public:void push(int node) {stack1.push(node);}int pop ...

  3. 剑指Offer对答如流系列 - 用两个栈实现队列

    面试题8:用两个栈实现队列 一.题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 二 ...

  4. 快速得到栈、队列的最大值

    特点 栈--先进后出 队列--后进先出 思路 1. 快速得到最大值的栈 结构 需要两个数组:一个数组stackItem保存栈的元素,另一个数组link2NextMaxValueIndex保存下一个最大 ...

  5. 算法与数据结构 -- 栈与队列(四)

    栈与队列定义了数据的操作 一.栈 栈是一种先入先出的数据结构.可以用顺序表实现,也可以用链表实现 栈操作 判断是否为空 压栈.入栈push 出栈 pop 返回栈顶元素 peek 栈的元素个数 # co ...

  6. java为什么不推荐使用stack_栈和队列的面试题Java实现,Stack类继承于Vector这两个类都不推荐使用...

    在 thinking in java中看到过说Stack类继承于Vector,而这两个类都不推荐使用了,但是在做一到OJ题时,我用LinkedList来模拟栈和直接用Stack,发现在进行入栈出栈操作 ...

  7. 用栈实现队列(Leetcode第232题)+用队列实现栈(Leetcode第225题)

    目录 1.题目描述 2.思路 3.代码展示 4.用队列实现栈 4.1题目描述 4.2思路 4.3代码实现 1.题目描述 2.思路 思路是很清晰的,栈是先进后出,而队列是先进先出,所以要用栈实现队列,就 ...

  8. 《数据结构C语言版》——栈和队列详解(图文并茂),从零开始的学习

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  9. java 栈队列区别是什么意思_java栈和队列的区别

    Java中用LinkedList实现栈和队列_IT/计算机_专业资料.笔记摘录 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则 较线性表有更多的限制,故...... 闽江学院电 ...

最新文章

  1. 老手讲解在JSP开发中与Web的中文问题解决方法
  2. Windows系统Pycharm软件重置设置,恢复默认设置方法介绍
  3. 二叉树的前序,中序,后序,层序遍历的递归和非递归实现
  4. 【图像分割模型】实例分割模型—DeepMask
  5. 仿某某网站模板thinkphp_西安网站建设到底是什么?
  6. python定时器库_Python定时器完整示例 python定时器用法举例
  7. 工作289:父子组件传值控制弹窗关闭
  8. 新年到!充满年味的海报给你参考
  9. 为了不把黑人兄弟认作大猩猩,谷歌的算法连真的大猩猩都不认识了
  10. C++ 基类私有成员会被继承吗
  11. 文本不换行省略—input属性
  12. cisco的路由器上rip的被动接口,单播更新,水平分隔
  13. error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]的解决方案
  14. Latex文档中 插入符号和编号
  15. 用费曼学习法学习费曼学习法-读《世界上最好的学习法:费曼学习法》收获
  16. 安装QQ音乐后导致Windows系统程序audiodg.exe频繁报错
  17. 百度搜索信风算法上线,为什么要严厉打击翻页诱导行为?
  18. 磁共振t1t2信号记忆顺口溜_【 磁共振t1与t2是啥意义】_特点_特征-大众养生网
  19. matalb读取txt文件以及将数据写入txt文件
  20. 录音一小时成稿五分钟,这样的智能录音笔你想要吗

热门文章

  1. Python 并发编程之使用多线程和多处理器
  2. STM32固件库文件树及构成详解
  3. python三十五:pickle模块
  4. Cookie 和 Session的区别
  5. ArcGIS Runtime for .Net Quartz开发探秘(三):承接来自GIS服务器的服务
  6. HTML5 本地文件操作之FileSystemAPI整理(一)
  7. java+JBroFuzz对restful api进行fuzz测试
  8. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))
  9. Windows锁定计算机C代码编程实现
  10. 云计算里AWS和Azure的探究(2)