堆栈中的最小值

时间:2012-10-24 21:37:17

标签: c data-structures

我正在尝试获得堆栈中的最小值,其中StackMin,Pop和Push都是Θ(1)。 我的代码不起作用......这是我的尝试:

typedef struct{
    int top;
    int entry[1000];
    int small;
} Stack;

void Pop(int *e,Stack *ps){
    *e=ps->entry[--ps->top];
}

void Push(int e,Stack *ps){
    ps->entry[ps->top++]=e;
}

int StackMin(Stack *ps){
    ps->small=ps->entry[ps->top];
    while(!StackEmpty(ps)){
        int *e;
        *e=ps->entry[--ps->top];
        if(ps->small >= *e){
            ps->small = *e;
        }
    }
    return ps->small;
}

3 个答案:

答案 0 :(得分:2)

您需要有两个堆栈才能执行此操作。一个堆栈可以按顺序包含最小值,每次调用最小值时都会更新此堆栈。尝试自己找出算法。

答案 1 :(得分:2)

这些行中不需要指针:

int *e; 
*e=ps->entry[--ps->top]; 
if(ps->small >= *e){ 
    ps->small = *e; 
} 

将它们更改为:

int e = ps->entry[--ps->top]; 
if(ps->small >= e){ 
    ps->small = e; 
} 

答案 2 :(得分:1)

“不起作用”对描述没有帮助......但无论如何,这看起来有问题:

int *e;
*e=ps->entry[--ps->top];
if(ps->small >= *e){
    ps->small = *e;
}

问题是,你已经声明了一个指针(当前没有指向它 - 它是未初始化的),然后你将值写入它指向的(无效)位置。

如果代码偶然没有崩溃,而您的问题与算法有关,则另一位用户已经发布了相关答案。