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 );
    }

  • 相关阅读:
    在新浪爱问上看到的有趣名字都记下来
    FastReports_4.14.1 _Cliff手动安装
    计算机算法对做事效率的启发(既要高强度猛攻,也要细水长流)
    有趣的数组
    listView 分页加载数据
    如何隐藏Cognos Viewer
    使用DBUnit实现对数据库的测试
    通过Jasmine和Guard自动测试JavaScript
    for惠普2013实习生
    栈的顺序存储,所谓的顺序栈
  • 原文地址:https://www.cnblogs.com/liangchao/p/2709952.html
Copyright © 2011-2022 走看看