zoukankan      html  css  js  c++  java
  • 包含min函数的栈结构——C语言

    题目出至结构之法博客——微软一百题。

    定义栈的数据结构,添加一个min函数,能够得到栈的最小元素。

    要求函数min, push以及pop的时间复杂度都是O(1)。

    由于要使得min函数的时间复杂度为O(1),那么就不能通过遍历O(n)来求最小值。可以通过在push阶段就确定最小值,使用min函数直接返回该值,就能够使得min函数的复杂度为O(1)。

    #include<stdio.h>
    #include<stdlib.h>
    #define STACK_INIT_SIZE 100 //存储空间初始分配量
    #define STACKINCREMENT 10 //存储空间分配增量

    typedef struct{
        int *base;
        int *top;
        int min;    //标记最小值
        int stacksize;
    }SqStack;

    SqStack* InitStack()
    {
        SqStack *S = ( SqStack* )malloc( sizeof( SqStack ) );  //指向栈结构的指针
        S->base = ( int* )malloc( STACK_INIT_SIZE * sizeof( int ) );  //指向数据的指针
        S->top = S->base;
        S->stacksize = STACK_INIT_SIZE;
        return S;
    }

    void Push( SqStack *S, int e )  //入栈
    {
        if( S->top - S->base >= S->stacksize )  //容量不足时增加存储容量
            {
                S->base = ( int* )realloc( S->base, ( S->stacksize + STACKINCREMENT ) * sizeof( int ) );  //扩容
                S->top = S->base + S->stacksize;
                S->stacksize += STACKINCREMENT;
            }
        if( S->top == S->base || e < S->min )  //min的初值为第一个入栈的数,每次输入都进行比较并存储最小值
            S->min = e;
        * S->top++ = e;
    }

    int Pop( SqStack *S )  //出栈
    {
        if( S->top == S->base ) return 0;
        return * --S->top;
    }


    int MinStack( SqStack *S )  //返回最小值
    {
        return S->min;
    }

    main()
    {
        int i, e, min;
        SqStack *S;
        S = InitStack();
        for( i = 0; i < 4; i++ )  //建立栈
        {
            printf( "Push Number e: \n" );
            scanf( "%d", &e );
            Push( S, e );
        }
        min = MinStack( S );
        printf( "%d\n", min );
    }

  • 相关阅读:
    ABP源码编译及部署
    nopCommerce源码本地部署、配置及语言包导入
    MongoDB查询转对象时出错 Element '_id' does not match any field or property of class
    找不到资产文件 project.assets.json
    Docker中运行.net core 验证码不显示
    css设置input不显示光标
    js中的==和===
    Navicat连接mysql(高级选项配置)
    js回调函数,检测这个值是否重复
    layer数据表格换行
  • 原文地址:https://www.cnblogs.com/liangchao/p/2709952.html
Copyright © 2011-2022 走看看