zoukankan      html  css  js  c++  java
  • 元素函数编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值

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

        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);
    	}
    	else
    		stack[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]);
    				}
    				else
    					printf("空栈\n");
    			}
    		}//end for
    		printf("over\n");
    	}//end while
    }
        每日一理道
    成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不需要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。

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

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

  • 相关阅读:
    PHP-------抽象和接口
    MySQL函数
    MySQL索引
    MySQL语法
    MySQL视图、事务
    最简洁粗暴版的虚拟用户配置FTP
    linux网络bond技术
    CentOS 7服务
    Nginx 基础
    shell 截取指定的字符串
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3052201.html
Copyright © 2011-2022 走看看